繁体   English   中英

Java 是否有计划添加隐式 Getter 和 Setter?

[英]Are there any plans for Java to add implicit Getters and Setters?

有谁知道是否有计划为类变量添加隐式 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

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

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

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

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

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

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

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

一个简单的 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 而不是直接的字段访问。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM