我一直在尝试在kotlin的heelo world程序中添加一个辅助构造函数。以下是我的代码。 (我使用在线kotlin ide https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt)
class Test(var name:String){
constructor(age:Int,data:Int){
println("$age $data")
}
fun display(){
println("hello world $name")
}
}
fun main(args: Array<String>) {
var t=Test("john")
var t1=Test(10,25)
t.display()
}
但它显示以下错误
Simplest version.kt
Error:(8, 4) Primary constructor call expected
Warning:(18, 8) Variable 't1' is never used
经过一些谷歌搜索我解决了错误。将辅助构造函数的第二个参数更改为字符串类型并添加:this(data)解决了问题。以下是已解析的代码
class Test(var name:String){
constructor(age:Int,data:String):this(data){
println("$age $data")
}
fun display(){
println("hello world $name")
}
}
fun main(args: Array<String>) {
var t=Test("john")
var t1=Test(10,"25")
t.display()
}
但问题是我想将两个整数值传递给辅助构造函数。我尝试了以下内容,但它给出了此错误
class Test(var name:String){
constructor(age:Int,data:Int):this(data){
println("$age $data")
}
fun display(){
println("hello world $name")
}
}
fun main(args: Array<String>) {
var t=Test("john")
var t1=Test(10,25)
t.display()
}
但它给出了这个错误
Simplest version.kt
Error:(8, 39) Type mismatch: inferred type is Int but String was expected
Warning:(17, 8) Variable 't1' is never used
我如何实现这一目标?如何将两个整数变量传递给辅助构造函数?
答案 0 :(得分:1)
在kotlin中,您必须从附加构造函数中调用主构造函数。根据我的理解,你想要有两个完全不同输入的构造函数。有很多方法可以实现这一目标。首先是从其他构造函数定义默认值。
class Test(var name:String) {
constructor(age:Int,data:Int):this("default name here"){
println("$age $data")
}
fun display(){
println("hello world $name")
}
}
上面的代码使用默认字符串作为参数调用主构造函数,因为您不打算在附加构造函数上接受此name参数。
另一种方式是可选参数。您可以将主构造函数参数定义为可选参数。这样,您就不必在主构造函数调用中提供值。
class Test(var name:String = "default value here") {
constructor(age:Int,data:Int):this(){
println("$age $data")
}
fun display(){
println("hello world $name")
}
}
虽然这第二种方法有一个问题。你现在有(有效)3个构造函数,其中1个是空的。
答案 1 :(得分:0)
@ tompee的答案更好。但这是另一种选择:
root /home/rails/testapp/public;