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>