Kotlin中的对象和数据类之间的区别是什么?

Sam*_*iya 2 android kotlin

Kotlin中的数据和对象类之间的区别是什么?

data class User(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)

object user {
    val name = ""
    fun printName(name: String) = "Hello, $name!"
}
Run Code Online (Sandbox Code Playgroud)

The*_*rer 8

Kotlinobject类似于 Java 中的类,其中所有方法和变量都是静态的。

object User {
    val name = ""
    fun printName(name: String) = "Hello, $name!"
}
Run Code Online (Sandbox Code Playgroud)

Kotlin 中的类似于 Java 中的以下内容:

class User {
    public static String name = "";
    public static String printName(name: String) {
        return "Hello " + name + "!";
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

//Kotlin
User.printName(User.name)

//Java
User.printName(User.name);
Run Code Online (Sandbox Code Playgroud)

不过,Anobject与我给出的 Java 比较并不完全相同。它可以继承接口和类,对象本身被实例化为单例实例。如果您使用 注释对象内的方法@JvmStatic,它们将成为真正的静态成员。

Kotlin 的对象


dataKotlin 中的类只是一个没有(或最少)逻辑并包含某些值的类的更简单的语法。Kotlin在数据类中为您生成equals(),hashCode()toString()函数,以及其他一些辅助函数。

data class User(val name: String, val age: String)
Run Code Online (Sandbox Code Playgroud)

在 Kotlin 中,在 Java 中看起来像这样:

class User {
    public final String name;
    public final String age;

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object other) {
        //Kotlin-generated equality check
    }

    @Override
    public long hashCode() {
        //Kotlin's hashcode
    }

    @Override 
    public String toString() {
        return "User(name=" + name + ",age=" + age + ")";
    }

    //other generated methods
}
Run Code Online (Sandbox Code Playgroud)

Kotlin 的数据类文档


Wil*_*zel 6

object

object 是Kotlin创建单例(一个实例类)的方法,该方法由编译器实例化。


data class

数据类类似于常规类,但具有一些优点/缺点。

好处

  • equals()/hashCode()
  • toString()
  • componentN()
  • copy()

这些是从构造函数中指定的属性创建的。

限制条件

  • 主构造函数必须至少具有一个参数。
  • 所有主要的构造函数参数都需要标记为val或var;
  • 不能是抽象的,开放的,密封的或内部的;
  • (1.1之前)只能实现接口。