Any和Object
Object是java的祖先类,Any是kotlin的祖先类;
Any类只存在于编译器,在运行期时,是没有Any类的,会转换为Object类;
java.lang.Object
kotlin.Any
先看类结构
Any
public open class Any {
public open operator fun equals(other: Any?): Boolean
public open fun hashCode(): Int
public open fun toString(): String
}
Object
public class Object {
public int hashCode() {}
public boolean equals(Object obj) {}
public String toString() {}
public final native void notify()
public final native void notifyAll()
public final void wait(long timeout) throws InterruptedException {}
public final native void wait(long timeout, int nanos) throws InterruptedException
public final void wait() throws InterruptedException {}
......
}
映射类型
在编译期,当kotlin代码中混合使用java类和一些java文件的代码时,并不会直接使用java的一些特殊类型进行编译,而是将其映射为kotlin的相关类。但是但是但是,最终在jvm虚拟机中运行时,映射的类和被映射的类是同一个类。也就是说,java类型映射到kotlin类型,仅仅只在编译期,在运行期,两个类型没有区别。
实际使用中的问题
1 . 在koltin文件中,是无法使用java.lang.Object类的;
2 . 可以使用Any类在kotlin文件中来代替Object类的使用;
//以下两种是同样的效果;
//声明Object数组;
Object[] objectArray
//声明Any数组;
var Array<Any>