为什么Scala中的对象中没有调用类参数?

10 浏览
0 Comments

为什么Scala中的对象中没有调用类参数?

在Scala中,为什么类参数并不是在对象上真正被调用的值?类参数是主构造方法的一部分,所以它不应该像Java那样设置对象的成员变量吗?为什么我们必须要创建单独的字段来作为在对象上设置的值?除了接受这个事实,是否有更好的解释?

admin 更改状态以发布 2023年5月23日
0
0 Comments

类参数是主构造函数的一部分,所以难道不应该设置对象的成员变量,就像Java一样吗?

即使在Java中,构造函数参数也不会自动成为类成员

public class User {
    public User(String name, Integer age) {
        // do something
    }
}
User user = new User("Picard", 75);
String name = user.name // error

因此,我们必须像这样做

public class User {
    String name;
    Integer age;
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

为什么我们必须创建单独的字段作为对象上设置的值?

使用case class我们可以免费获得它(和其他一些内容

case class User(name: String, age: Int)
val user = User("Picard", 75)
val name = user.name // ok

0
0 Comments

如果你想要调用类的主构造器分配的参数,你需要将它们声明为字段。

class Man(name: String, age: Int) {
      def show = "My name is " + name + ", age " + age
}

这里的 nameage构造器参数。它们只在类的范围内可访问。

class Man(val name: String, age: Int) {
      def show = "My name is " + name + ", age " + age
}

注意,name 现在是一个变量。因此你现在可以通过 Man 类的实例访问 name

val x  = new Man("Jack",10)
x.name // Jack

但你无法访问 age,因为它是参数而不是字段。

0