Kotlin 有==对象吗
kotlin中的以下代码:Kotlin 有==对象吗,kotlin,Kotlin,kotlin中的以下代码: Any().javaClass 值为java.lang.Object。这是否意味着Any和Object是同一类?他们之间有什么关系?没有 从 (强调矿山) Kotlin中的所有类都有一个公共超类Any,这是默认值 对于未声明超类型的类,super: 类示例//隐式继承自任何 Any不是java.lang.Object;特别是,它没有任何 除equals()、hashCode()和toString()以外的成员。请 有关更多详细信息,请参阅Java互操作性部分 此外,
Any().javaClass
值为java.lang.Object
。这是否意味着Any
和Object
是同一类?他们之间有什么关系?没有
从
(强调矿山)
Kotlin中的所有类都有一个公共超类Any
,这是默认值
对于未声明超类型的类,super:
类示例//隐式继承自任何
Any
不是java.lang.Object
;特别是,它没有任何
除equals()
、hashCode()
和toString()以外的成员。请
有关更多详细信息,请参阅Java互操作性部分
此外,在有关映射类型的部分中,我们发现:
Kotlin专门处理一些Java类型。这些类型不是从中加载的
Java“原样”,但映射到相应的Kotlin类型。映射
只有在编译时才重要,运行时表示形式仍然有效
不变。Java的原语类型映射到相应的Kotlin
类型(记住平台类型):
java.lang.Object
kotlin.Any代码>
这表示在运行时java.lang.Object
和kotlin.Any代码>的处理方式相同。但是
还意味着该类型是平台类型,这意味着禁用空检查等
Java中的任何引用都可能为null,这使得Kotlin的
严格的空安全对于来自Java的对象是不切实际的。种类
Java声明在Kotlin中特别处理,称为平台
类型。对此类类型放宽了空检查,以确保安全性
对于它们,与Java中的相同(请参阅下面的更多内容)
当我们对平台类型的变量调用方法时,Kotlin不会
在编译时发出nullability错误,但调用可能在编译时失败
运行时,由于空指针异常或Kotlin
生成以防止空值传播:
Kotlin编译器将Kotlin.Any
和java.lang.Object
视为两种不同的类型,但在运行时,它们用相同的java.lang.Object
类表示
javaClass
属性返回实例的运行时类,因此在这两种情况下得到相同的java.lang.Object
类
还有其他类型在编译时不同,但在运行时相同;它们列在文档的一节中。事实上,Kotlin lang方面没有java.lang.Object
,因此您当然不能说Any
是Object
。你只能说Any
取代了Kotlin中的Object
。“Any”
类似于java.lang.Object
:Kotlin中所有类的超类。完全相同。它只是阻止Kotlin不想要的属性:
fun main() {
val any = Any()//java Object
val obj = Object()//java Object
println(any::class)//Object class
println(obj::class)//Object class
}
斯马利:
fun test(aaaaa: Any) {
}
e、 i.查阅这篇文章:你能解释一下它们之间的区别吗?为什么任何is对象的java类都是这样的?Kotlin生成的以防止null传播到
Propagto?any不声明wait()、notify()、notifyAll()这使得它不可能像普通Java对象那样用作锁。@dkarmazi您可以将其强制转换为Java.lang.object
,然后您就可以对其调用这些方法。是否有任何支持泛型的方法?您也可以强制转换为任何to对象,以何种方式它是模拟的?它在编译时有点不同。。。
public final static test(Ljava/lang/Object;)V
// annotable parameter count: 1 (visible)
// annotable parameter count: 1 (invisible)
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
L0
ALOAD 0
LDC "aaaaa"
INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkNotNullParameter (Ljava/lang/Object;Ljava/lang/String;)V
L1
LINENUMBER 4 L1
RETURN
L2
LOCALVARIABLE aaaaa Ljava/lang/Object; L0 L2 0
MAXSTACK = 2
MAXLOCALS = 1
@Lkotlin/Metadata;(mv={1, 4, 2}, bv={1, 0, 3}, k=2, d1={"\u0000\u000e\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0000\n\u0000\u001a\u000e\u0010\u0000\u001a\u00020\u00012\u0006\u0010\u0002\u001a\u00020\u0003\u00a8\u0006\u0004"}, d2={"test", "", "aaaaa", "", "SPWrapper.app"})
// compiled from: T.kt
}