gpt4 book ai didi

java - ClassAny 类之间有什么区别(信用 : Any) and class UserAdmin(credit:T) in Kotlin?

转载 作者:行者123 更新时间:2023-11-30 02:14:03 25 4
gpt4 key购买 nike

我在学习 Kotlin 语言时编写了以下代码。

class UserAdmin<T>(credit: T) {
init {
println("Class with generics: " + credit)
}
}

class UserAdminAny(credit: Any) {
init {
println("Any class: $credit")
}
}

fun main(args: Array<String>) {

var user = UserAdmin<String>("String")
var user2 = UserAdmin<Int>(1)

var userAny = UserAdminAny(1)
var userAny2 = UserAdminAny("String")
}

程序的输出是:

带有泛型的类:String具有泛型的类:1任何类(class):1任何类:字符串

我想知道 Kotlin 中的“Any”关键字和泛型之间有什么区别以及何时何地使用它们。两者都给出了相同的响应。

提前致谢。

最佳答案

从客户端的角度来看,这主要是关于编译时类型安全。拿这个:

class UserAdmin<T>(val credit: T)
class UserAdminAny(val credit: Any)

val user = UserAdmin("String")
println(user.credit.length)
val userAny2 = UserAdminAny("String")
println(userAny2.credit.length) //does not compile, you'd need to cast Any to String before!

作为客户端,您希望属性为 String,而不是强制转换 Any 类型,该类型基本上可以是 any 类型并且可能会在运行时失败,而泛型已经在编译时为您提供了类型安全性。

advantages of generics :

  • 消除类型转换
  • 在编译时进行更强的类型检查
  • 使程序员能够实现通用算法

关于java - ClassAny 类之间有什么区别(信用 : Any) and class UserAdmin<T>(credit:T) in Kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com