我在学习 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 类型并且可能会在运行时失败,而泛型已经在编译时为您提供了类型安全性。
- 消除类型转换
- 在编译时进行更强的类型检查
- 使程序员能够实现通用算法
关于java - ClassAny 类之间有什么区别(信用 : Any) and class UserAdmin<T>(credit:T) in Kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49168027/