【发布时间】:2015-12-17 12:49:37
【问题描述】:
我找不到如何使用 Kotlin 语言获取变量(或常量)的类型为 String,如 typeof(variable)。如何做到这一点?
【问题讨论】:
-
你应该澄清你想用“变量的类型”做什么,例如如果检查“a 是 b 的实例”那么你不想要一个字符串。如果用于显示或其他用途,则可能是字符串。
-
很简单:变量::类
我找不到如何使用 Kotlin 语言获取变量(或常量)的类型为 String,如 typeof(variable)。如何做到这一点?
【问题讨论】:
您可以使用最适合您需求的方法之一:
val obj: Double = 5.0
System.out.println(obj.javaClass.name) // double
System.out.println(obj.javaClass.kotlin) // class kotlin.Double
System.out.println(obj.javaClass.kotlin.qualifiedName) // kotlin.Double
你可以摆弄这个here。
【讨论】:
javaClass,正如其他 cmets 所述,是答案。
val obj = getInt(); 其中 getInt() 返回 Int? 类型,那么尝试 obj.javaClass.name 会导致编译错误
obj?.javaClass?.name,它会为空值返回null
kotlin.jvm.KotlinReflectionNotSupportedError: stackoverflow.com/a/36440329/5800527
有一种更简单的方法是使用 simpleName 属性并避免使用 Kotlin 前缀。
val lis = listOf(1,2,3)
lis 来自 ArrayList 类型。所以可以使用
println(lis.javaClass.kotlin.simpleName) // ArrayList
或者,更优雅:
println(lis::class.simpleName) // ArrayList
【讨论】:
您可以使用'::class' 关键字来指定实例的类型。 .simpleName 属性返回返回类的字符串名称。
var variable = MyClass()
var nameOfClass = variable::class.simpleName
nameofClass >> "MyClass"
【讨论】:
Type Checks and Casts: 'is' and 'as'
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // same as !(obj is String)
print("Not a String")
}
【讨论】:
instanceof,而是 is and !is operators