是否有任何Java计划添加隐式Getters和Setter?

时间:2013-05-24 02:43:23

标签: java scala language-design getter-setter

有没有人知道是否有计划为类变量添加隐式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 个答案:

答案 0 :(得分:8)

不是Java本身,但有Project Lombok

答案 1 :(得分:2)

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

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

我自己对这个主题的看法是, JavaBean 模型已经过于成熟,无法承认任何重大的向后兼容性变化,而且java封装模型基于隐藏字段的概念访问并提供访问者/ mutators

如果您只想公开会员,您只需将它们公开

将字段转换为自动 accessor / mutator 方法对语言来说是一个很大的变化,并且可能会产生很多混乱,但收效甚微。

为了uniform access principle,你还应该考虑scala选择意味着一种完全不同的成员访问方法。

答案 2 :(得分: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方法,而不是直接进行字段访问。

答案 3 :(得分:0)

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