kotlin 中的如下代码:
Any().javaClass
具有 java.lang.Object
的值。这是否意味着 Any
和 Object
是同一个类?他们是什么关系?
最佳答案
没有。
来自 Kotlin docs (强调我的)
All classes in Kotlin have a common superclass
Any
, that is a default super for a class with no supertypes declared:
class Example // Implicitly inherits from Any
Any
is notjava.lang.Object
; in particular, it does not have any members other thanequals()
,hashCode()
andtoString()
. Please consult the Java interoperability section for more details.
此外,从我们发现的映射类型部分:
Kotlin treats some Java types specially. Such types are not loaded from Java “as is”, but are mapped to corresponding Kotlin types. The mapping only matters at compile time, the runtime representation remains unchanged. Java’s primitive types are mapped to corresponding Kotlin types (keeping platform types in mind):
...
java.lang.Object
kotlin.Any!
这表示在 runtime java.lang.Object
和 kotlin.Any!
被同等对待。但是 !
也意味着该类型是一个平台类型,这意味着禁用空检查等。
Any reference in Java may be null, which makes Kotlin’s requirements of strict null-safety impractical for objects coming from Java. Types of Java declarations are treated specially in Kotlin and called platform types. Null-checks are relaxed for such types, so that safety guarantees for them are the same as in Java (see more below).
...
When we call methods on variables of platform types, Kotlin does not issue nullability errors at compile time, but the call may fail at runtime, because of a null-pointer exception or an assertion that Kotlin generates to prevent nulls from propagating:
https://stackoverflow.com/questions/38761021/