Java getter/setter字段方法的缩写形式

Java getter/setter字段方法的缩写形式,java,Java,我很好奇是否存在对象的getter/setter方法的缩写形式 SimpleObject oSimple = new SimpleObject(); oSimple.setCounterValue(oSimple.getCounterValue() + 1); 像一个简单的数据类型 int counter = 0; counter += 2; 信息 getter/setter方法是必需的 添加 如果没有支持此想法的语言功能,那么在良好干净的代码环境中,最方便的处理方法是什么?如果设置时不必检

我很好奇是否存在对象的getter/setter方法的缩写形式

SimpleObject oSimple = new SimpleObject();
oSimple.setCounterValue(oSimple.getCounterValue() + 1);
像一个简单的数据类型

int counter = 0;
counter += 2;
信息

getter/setter方法是必需的

添加


如果没有支持此想法的语言功能,那么在良好干净的代码环境中,最方便的处理方法是什么?

如果设置时不必检查
值是否有任何错误值/执行代码,您可以直接引用变量来解决它:

public Class SomeObject{
     public int value;
}

public Class Main{

     public static void main(String[] args){
          SomeObject o = new SomeObject();
          o.value += 1;
     }
}
你有C#背景我可以想象;-)

这在Java中是不可能的(除了不完全相同的解决方案,如具有公共属性等)。与运算符重载相同,这也可以解决您的问题


不过请看一看,它是一种类似于Java的JVM语言,支持运算符重载和其他一些漂亮的东西。

对于这种情况,我创建了注释

/**
 * Annotation for PropertiesContainer class (that has field without getter and setter)
 * This class look like as class with Properties in C#
 *
 */
public @interface PropertiesContainer {
}
添加到任何类(注释显示这不是错误)

只需使用:

oSimple.counter++;

如果您给出的示例是您想要做的(每次创建一个新对象时递增并为其分配一个索引),那么通常的做法是使用静态变量作为计数器,使用局部变量作为特定索引

class SomeObject {

    static int objectCounter;
    private int index;

    public SomeObject() {
       index = objectCounter++;
       // additional constructor code
    }
}

<>如果你想给一个变量加个数,我会考虑做一个单独的方法,而不是试图重写Stand(),或者如果它有意义的话,把它作为SET()的代码的一部分。

< P>作为GERT3,在java中没有直接访问属性的情况下,对于Stter /GETTER没有捷径。
在您的例子中,
SimpleObject
-类应该只有一个方法
increaseCounter()
,也许
increaseCounterBy(int-add)
(或者简单地
add(int-a)
)。

您可以在Scala中这样做,但不能在Java中这样做。对于您的附加问题,
lombok
防止您必须声明getter和setter(因此,您只需在bean中声明属性),但仍需显式调用它们。如果您可以控制
SimpleObject
的源代码,则可以添加一个“increment”方法,确保它以原子方式执行。或许可以查看一下(及其同级)。增量只是处理数值运算的同类型变量传递方式的一个示例。我可以控制
SimpleObject
。还要提到的是,在setter/getter方法中,逻辑可以发生。当然,对于这种方便的方法,必须考虑到这一点。我有一些,是的。我是MPLE无法相信java中有如此有用的东西。所以,通常的方法是使用XCATD JVM方言。我不认为这是一种可行的方法。如果你有自由的话,它只是一个选项。对于我们大多数人来说,我们的方法就是活在一个不可能的事实中。这可能是一个宗教性的讨论,我不太喜欢C#的getter/setter被“伪装”为属性的概念,除非在非常特殊的情况下。一般来说,这是令人困惑的。在语言转换的上下文中,我倾向于忽略它(以及运算符重载)(例如,将COBOL转换为Java,其中“+”需要做的不仅仅是Java添加,或者你想添加两个非本机类型。从概念上来说,这仍然是一个加号。就我而言,恐怕我无法迁移到xtend,因为运算符重载只是整个过程的一个小片段,而从vanilla Java到xtend的更改可能会非常繁重。此外,如果你在团队中工作,那么我想我会坚持使用
increaseCounterBy
解决方案,因为它看起来是一个很好的折衷方案,不使用xtend,而只是简单地显示后台正在进行自我添加。
class SomeObject {

    static int objectCounter;
    private int index;

    public SomeObject() {
       index = objectCounter++;
       // additional constructor code
    }
}