class Greeter(name: String) {
fun greet() {
println("Hello, $name")
}
}
fun main(args: Array<String>) {
Greeter(args[0]).greet()
}
对于上述程序,我收到此错误
Unresolved reference: name
但是当我添加var或val
class Greeter(var name: String) {
或
class Greeter(val name: String) {
然后程序工作正常,所以为什么我需要在名称中添加var或val,构造函数参数val或var的默认类型是什么,为什么当我不提及var或val时程序给我错误
答案 0 :(得分:1)
添加val或var使参数成为属性,并且可以在整个类中进行访问。 没有这个,只能在init {}
内部访问答案 1 :(得分:0)
要在类Greeter(name:String)之类的构造函数中使用您的值,可以使用init {}
class Greeter(name: String) {
var string:name = ""
init{
this.name = name
}
fun greet() {
println("Hello, $name")
}
}
或如果在构造函数中使用val或var,则它更像是类级别的变量,并且可以在类内部的任何位置进行访问
class Greeter(var name:String){
fun greet() {
println("Hello, $name")
}
}
然后可以在类中直接使用变量名。 在这两种情况下,我们都可以为变量提供默认值。
答案 2 :(得分:0)
这个问题没有任何意义,但是您面临的问题是有道理的。就您而言,您使用的方法是
错误的方法:
// here name is just a dependency/value which will be used by the Greeter
// but since it is not assigned to any class members,
// it will not be accessible for member methods
class Greeter(name: String) {
fun greet(){} // can not access the 'name' value
}
正道:
// here name is passed as a parameter but it is also made a class member
// with the same name, this class member will immutable as it is declared as 'val'
class Greeter(val name: String) {
fun greet(){} // can access the 'name' value
}
您还可以将val
替换为var
,以使name
成为mutable
类成员。