jos*_*jan 4 kotlin kotlin-interop
有什么区别:
定义1
data class Person (var name:String, var age:Int)
Run Code Online (Sandbox Code Playgroud)
定义2
class Person (var name:String, var age:Int)
Run Code Online (Sandbox Code Playgroud)
定义3
class Person (){
var name:String = ""
var age:Int = 1
}
Run Code Online (Sandbox Code Playgroud)
在3种情况下,当我使用自动完成时,我看到像POJO一样的可用方法...是相同但3种不同的方式?
Eri*_*ric 14
equals和hashCode,&toString之间最重要的区别定义1和定义2和3是在定义1的equals,hashcode和toString方法被覆盖为您提供:
equals和hashCode方法测试结构平等toString 方法返回一个漂亮的,人性化的字符串代码示例:
注意:在Kotlin中,==操作员调用对象的.equals()方法.有关详细信息,请参阅kotlinlang.org上的运算符重载.
data class Person1 (var name:String, var age:Int)
class Person2 (var name:String, var age:Int)
@Test fun test1()
{
val alice1 = Person1("Alice", 22)
val alice2 = Person1("Alice", 22)
val bob = Person1("bob", 23)
// alice1 and alice2 are structurally equal, so this returns true.
println(alice1 == alice2) // true
// alice1 and bob are NOT structurally equal, so this returns false.
println(alice1 == bob) // false
// the toString method for data classes are generated for you.
println(alice1) // Person1(name=Alice, age=22)
}
@Test fun test2()
{
val alice1 = Person2("Alice", 22)
val alice2 = Person2("Alice", 22)
val bob = Person2("bob", 23)
// even though alice1 and alice2 are structurally equal, this returns false.
println(alice1 == alice2) // false
println(alice1 == bob) // false
// the toString method for normal classes are NOT generated for you.
println(alice1) // Person2@1ed6993a
}
Run Code Online (Sandbox Code Playgroud)
定义1和2与定义3之间的另一个区别是:
代码示例:
data class Person1 (var name:String, var age:Int)
class Person2 (var name:String, var age:Int)
class Person3 ()
{
var name:String = ""
var age:Int = 1
}
@Test fun test3()
{
Person1("alice",22) // OK
Person2("bob",23) // OK
Person3("charlie",22) // error
Person1() // error
Person2() // error
Person3() // OK
}
Run Code Online (Sandbox Code Playgroud)
copy方法最后,定义1和定义2和3之间的另一个区别在于,在定义1中,为其生成copy方法.以下是如何使用它的示例:
val jack = Person1("Jack", 1)
val olderJack = jack.copy(age = 2)
// jack.age = 1
// olderJack.age = 2
Run Code Online (Sandbox Code Playgroud)