Как и вы, я использовал для использования lombok для toString()
и equals()
в Java, поэтому было немного разочаровано тем, что для не-данных классов в Котлине требуется весь стандартный шаблон.
Итак, я создал Kassava, библиотеку с открытым исходным кодом, которая позволяет реализовать toString()
и equals()
без каких-либо шаблонов - просто поставьте список свойств, и все готово!
Например:
// 1. Import extension functions
import au.com.console.kassava.kotlinEquals
import au.com.console.kassava.kotlinToString
import java.util.Objects
class Employee(val name: String, val age: Int? = null) {
// 2. Optionally define your properties for equals()/toString() in a companion
// object (Kotlin will generate less KProperty classes, and you won't have
// array creation for every method call)
companion object {
private val properties = arrayOf(Employee::name, Employee::age)
}
// 3. Implement equals() by supplying the list of properties to be included
override fun equals(other: Any?) = kotlinEquals(
other = other,
properties = properties
)
// 4. Implement toString() by supplying the list of properties to be included
override fun toString() = kotlinToString(properties = properties)
// 5. Implement hashCode() because you're awesome and know what you're doing ;)
override fun hashCode() = Objects.hash(name, age)
}
Ломбок все еще может работать, нет? – voddan
Аннотации Lombok не работают, объяснение: http://stackoverflow.com/questions/35517325/kotlin-doesnt-see-java-lombok-accessors – awfun
Я рекомендую оспаривать необходимость «lateinint var» и «data», 'toString()' в том же классе. Не понимая больше о том, как используется «ConfirmRequest», сложно сделать рекомендацию, но «класс данных ConfirmRequest (var playerId: String? = Null)», кажется, отлично работает для меня. Если бы вы знали, что он никогда не будет использоваться в то время, когда 'playerId == null', вы можете сделать элемент данных частным и открыть для него публичное свойство, отличное от null. – mfulton26