kotlin - 我创建类的对象并得到一个错误“线程“主”java.lang.StackOverflowError中的异常”
问题描述
我创建类人。现在我尝试使用此类的对象创建列表。当我创建它时,我收到此错误:“BodyKt$main$Person.(body.kt:9) 处的线程“main”java.lang.StackOverflowError 异常”。我做错了什么?
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}")
}
解决方案
问题是您Person
每次创建一个新实例时都会实例化一个新实例Person
。这导致无限调用Person()
.
在 Java 中,这就像
class Person() {
new Person()
}
你能看出那里的问题吗?
虽然您不是在构造函数中执行此操作,但您是在创建新实例时初始化的字段上执行此操作。
您可以通过将字段更改为 getter 来修复异常。除非有人真正尝试获取该Person
列表,否则不会创建该列表,从而消除了无限循环。
val somebody
get() = listOf(Person("Copy", "some", 15, 11.1, 1870))
推荐阅读
- php - jquery数据表中的group concat方法
- codenameone - 此版本不符合 Google Play 64 位要求:Google play
- html - 注释掉 html 标记的原因是什么?
- python - 如何在 Python 3 中导入与 __main__ 程序同名的模块?
- sql - ORACLE SQL 枢轴问题
- javascript - JavaScript,预计在箭头函数的末尾返回一个值
- javascript - 响应 cookie 未在 Fetch 请求中发送
- python - 安装完成之前tenserflow相当
- python - 打印矩阵的元素,每行换行,每行的元素用空格分隔
- google-cloud-platform - 从另一个项目访问 Cloud Run 服务