什么是kotlin类构造函数参数的默认值类型?

时间:2019-12-14 04:25:30

标签: oop kotlin

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时程序给我错误

3 个答案:

答案 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类成员。