Java getter/setter字段方法的缩写形式
我很好奇是否存在对象的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方法是必需的 添加 如果没有支持此想法的语言功能,那么在良好干净的代码环境中,最方便的处理方法是什么?如果设置时不必检
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
}
}