1

有谁知道是否有计划为 Class 变量添加隐式 getter 和 setter?

我正在考虑已经允许这样做的当前 Scala 代码。类似于以下内容,如果您没有定义 getter/setter,它会使用该值,但如果您为该值定义了一个 getter/setter,它会使用它而不是直接变量调用。

class A{
    int value = 3;
}

class B{
    int value = 3;
    public int value(){
        return value;
    }
}

// in some method
A a = new A();
System.out.println(a.value); 
B b = new B();
System.out.println(b.value); // <-- no () for accessing value even though it uses the getter
4

4 回答 4

9

不是 Java 本身,但有这个Project Lombok

于 2013-05-24T02:47:06.817 回答
4

前言:也许我错了,但问题可能更适合 java 平台用户/开发人员列表,例如http://www.oracle.com/technetwork/java/javase/community/index.html

我想你会在那里得到更有意义的答案,更少的猜测。

我自己对这个主题的看法是,JavaBean模型过于成熟,无法承认任何向后兼容性的重大变化,并且 Java 封装模型基于您隐藏具有私有访问权限的字段并提供访问器/修改器的概念。

如果您只想公开成员,您可以简单地将它们设为public

将字段转换为自动访问器/修改器方法对语言来说是一个很大的变化,并且可能会造成很多混乱而收效甚微。

为了统一访问原则,您还应该考虑到 scala 选择意味着一种完全不同的成员访问方法。

于 2013-05-24T08:08:43.290 回答
0

Java 14(LTS 版本)有记录,但您需要使用其他选项进行编译才能使其工作。Records 为构造函数参数提供 getter,旨在解决早期版本中固有的一些其他问题。

于 2020-11-14T22:21:01.653 回答
0

一个简单的 getter 返回一个字段值。然而,getter 也可以返回操作的结果:

public boolean isError()
{
   return errorList.size() > 0;
}

同样,setter 可能会执行其他操作:

public void setName(String name)
{
   this.name = name;
   this.sortName = name.toLowerCase();
}

因此,除了 bean 范式之外,为了保持一致性,应该使用 getter/setter,而不是直接访问字段。

于 2020-11-14T18:56:06.720 回答