Kotlin 我创建类的对象并得到一个错误;“线程中的异常”;“主要”;java.lang.StackOverflowerError“;

Kotlin 我创建类的对象并得到一个错误;“线程中的异常”;“主要”;java.lang.StackOverflowerError“;,kotlin,stack-overflow,Kotlin,Stack Overflow,我创建了一个类人。现在,我尝试使用此类的对象创建列表。当我创建它时,我得到了这个错误:“线程“main”中的异常在BodyKt$main$Person处的java.lang.StackOverflower错误。(body.kt:9)”。我做错了什么 fun main() { // copy object in object class Person (var name: String = "Orig", var type: String = "piece",

我创建了一个类人。现在,我尝试使用此类的对象创建列表。当我创建它时,我得到了这个错误:“线程“main”中的异常在BodyKt$main$Person处的java.lang.StackOverflower错误。(body.kt:9)”。我做错了什么

fun main() {
    // copy object in object
    class Person (var name: String = "Orig", var type: String = "piece",
                       var age: Int = 18, var high: Double = 25.7, var code: Int = 1522)
    {
        var info: String = "0"
            get() = "Name: $name Age: $age Type: $type High: $high Code: $code"
        var somebody : List<Person> = listOf(
            Person("Copy", "some", 15, 11.1, 1870))
    }
    var default: Person = Person()
    val ann: Person = Person("Ann", "man", 10, 0.5, 1408) // 1st object with some properties
    var bob: Person = Person("Bob", "girl", 20, 15.0, 1239) // 2nd object without prop
    println("Properties of Ann: ${ann.info}") // props 1st object
    println("Properties of Bob: ${bob.info}") // props 2nd object
    println("Default: ${default.info}") // props default
    bob = ann.deepCopy() // copy 1st in 2nd
    println("Bob has Anns' props: ${bob.info}") // new props 2nd object
    println("Default list: ${default.somebody}")
}
fun main(){
//在对象中复制对象
类人(变量名称:String=“Orig”,变量类型:String=“piece”,
变量年龄:Int=18,变量高:Double=25.7,变量代码:Int=1522)
{
变量信息:String=“0”
get()=“Name:$Name年龄:$Age类型:$Type高:$High代码:$Code”
var:List=listOf(
人(“复印件”、“一些”、15、11.1、1870))
}
var默认值:Person=Person()
val-ann:Person=Person(“ann”,“man”,10,0.51408)//具有某些属性的第一个对象
var bob:Person=Person(“bob”,“girl”,20,15.01239)//第二个没有道具的对象
println(“Ann的属性:${Ann.info}”)///props第一个对象
println(“Bob的属性:${Bob.info}”)///props第二个对象
println(“默认值:${Default.info}”)//道具默认值
bob=ann.deepCopy()//第二次复制第一次
println(“Bob拥有Anns的道具:${Bob.info}”)//新道具第二个对象
println(“默认列表:${Default.someone}”)
}

问题在于,每次创建
人的新实例时,您都在实例化一个新的
人。这将导致对
Person()
的无限调用

在Java中,这就像

class Person() {
    new Person()
}
你能看到那里的问题吗

虽然不在构造函数中执行此操作,但在创建新实例时初始化的字段中执行此操作

可以通过将字段更改为getter来修复异常。只有在有人真正尝试获取并删除无限循环后,才会创建
Person
列表

val somebody
    get() = listOf(Person("Copy", "some", 15, 11.1, 1870))

这是因为您创建了一个Person实例,然后创建了另一个Person实例,然后创建了另一个Person实例。。。等等最终得到的是堆栈溢出。问题的根源在于
someone
属性。尝试为它使用
get()
符号,以便按需/惰性地创建它,这将解决您的问题。这里有更多信息:但我读到了:那里写了
val productList=listOf(Product(“WebStorm”,49.0),Product(“AppCode”,99.0),Product(“DotTrace”,129.0),Product(“ReSharper”,149.0))println(productList.binarySearch(Product(“AppCode”,99.0),compareBy{it.price})。然后是{it.name})
我理解错了什么?谢谢,我试过了,但是需要初始化还是跳过了?最后一个问题:我在这里读到:kotlinlang.org/docs/reference/list-operations.html,create对象没有任何错误
val productList=listOf(Product(“WebStorm”,49.0),Product(“AppCode”,99.0),Product(“DotTrace”,129.0),Product(“ReSharper”,149.0))println(productList.binarySearch(Product(“AppCode”,99.0),compareBy{it.price},然后by{it.name}))
我做错了什么?在该示例中,在初始化类时,他们没有初始化
产品
类中的列表。我的示例的问题是我将其称为
var
,必须将其初始化为。例如,您可以将其设置为
emptyList()