我在学习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")
}
该计划的输出是:
带有泛型的类:字符串 具有泛型的类:1 任何课程:1 任何类:String
我想知道Kotlin中“Any”关键字和泛型之间有什么区别,以及何时何地使用它们。 这两个都给出了相同的答案。
提前致谢。
答案 0 :(得分:2)
从客户的角度来看,主要是关于编译时类型安全。拿这个:
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
类型,这可能基本上是任何的事情,并且可能在运行时失败而泛型已经在编译时为您提供了类型安全性。