Какова разница между объектом и классом данных в kotlin? - PullRequest
0 голосов
/ 02 февраля 2019

В чем разница между данными и классом объектов в Котлине и целью каждого из них?

data class User(val name: String, val age: Int)

и

object user {
    val name = ""
    fun printName(name: String) = "Hello, $name!"
}

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Kotlin object похож на класс в Java, где все методы и переменные являются статическими.

object User {
    val name = ""
    fun printName(name: String) = "Hello, $name!"
}

в Kotlin похож на следующее в Java:

class User {
    public static String name = "";
    public static String printName(name: String) {
        return "Hello " + name + "!";
    }
}

Пример использования:

//Kotlin
User.printName(User.name)

//Java
User.printName(User.name);

object не совсем то же самое, что сравнение Java, которое я дал.Он может наследовать интерфейсы и классы, а сам объект создается как единичный экземпляр.Если вы аннотируете методы внутри объекта с помощью @JvmStatic, они станут настоящими статическими членами.

Объект Kotlin


Класс data в Kotlin:просто более простой синтаксис для класса, который не имеет (или минимальной) логики и содержит определенные значения.Kotlin генерирует функции equals(), hashCode() и toString() для вас в классе данных вместе с некоторыми другими вспомогательными функциями.

data class User(val name: String, val age: String)

в 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
}

Документация класса данных Kotlin

0 голосов
/ 02 февраля 2019

Короче говоря, объект используется, если вы хотите создать синглтон, уникальным объектом для класса и класса данных является класс, который имеет равные, hashCode, toString автоматически сгенерированный ...

0 голосов
/ 02 февраля 2019

object

object - это способ Котлина создать синглтон (один экземплярный класс), который создается экземпляром компилятора.


data class

Класс данных подобен обычному классу, но с некоторыми преимуществами / ограничениями.

Преимущества

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

Они создаются из свойств, указанных в конструкторе.

Ограничения

  • Первичный конструктор должен иметь хотя бы один параметр;
  • Все параметры первичного конструктора должны быть помечены как val или var;
  • не может быть абстрактным, открытым, запечатанным или внутренним;
  • (до 1.1) может реализовывать только интерфейсы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...