减少java对象添加中的样板文件
我想为我的简单对象编写add、subtract和equals方法,允许字段中为null。我最终使用python生成样板代码,这告诉我我做错了什么。写这样一个类的方法是什么减少java对象添加中的样板文件,java,Java,我想为我的简单对象编写add、subtract和equals方法,允许字段中为null。我最终使用python生成样板代码,这告诉我我做错了什么。写这样一个类的方法是什么 package com.blicket.parser; /** * Created by steve on 8/22/16. */ public class Foo { public Integer bar; public Integer baz; public Integer qux;
package com.blicket.parser;
/**
* Created by steve on 8/22/16.
*/
public class Foo {
public Integer bar;
public Integer baz;
public Integer qux;
public boolean equals(Foo b){
if(
(this.bar == b.bar || this.bar.equals(b.bar) &&
(this.baz == b.baz || this.baz.equals(b.baz) &&
(this.qux == b.qux || this.qux.equals(b.qux) &&
){
return true;
} else {
return false;
}
}
public Foo add(Foo a, Foo b){
Foo c = new Foo();
c.bar = a.bar + b.bar;
c.baz = a.baz + b.baz;
c.qux = a.qux + b.qux;
return c;
}
}
编辑:我使用==进行空检查,但它是多余的。别这样,读者。我留下了错误的代码示例,以确保注释有意义
编辑2:如果bar、baz或qux为null,则尝试去掉==检查不起作用
public boolean equals(Foo b){
if(
this.bar.equals(b.bar) &&
this.baz.equals(b.baz) &&
this.qux.equals(b.wux)
){
return true;
} else {
return false;
}
}
抛出NullPointerException
编辑3电子禧年:看起来正确的答案是
public boolean equals(Foo b){
return Objects.equals(this.bar, b.bar) &&
Objects.equals(this.baz, b.baz) &&
Objects.equals(this.qux, b.qux);
}
您应该尝试Groovy,它支持带重载的+和-操作: 第十章。运算符重载 因此,您可以编写以下内容,而不是公共布尔addFoo a,Foo b:
def plus(Foo foo){
this.bar+=foo.bar
this.baz+=foo.baz
this.qux*=foo.qux
}
然后将其用作:
Foo a = ...
Foo b = ...
Foo c = a + b;
因此,对您的问题的正确答案是扩展语言,而不是生成样板代码。除了代码生成、字节码生成或运行时反射之外,对于一般情况,显然没有办法做到这一点。@azurefrog:我在摆弄三个勾号块的格式,但没有得到我想要的结果。我看到你把一切都缩进了;这是获得更好成绩的唯一途径吗?关于为什么triple tick失败的想法?以下是答案。我不熟悉这三个滴答声。也许SO的格式化程序不支持它?@bwarren2不支持复杂的等号,只需返回Objects.equalThis.bar、b.bar&&Objects.equalThis.baz、b.baz&&Objects.equalThis.qux、b.qux;。这将为您处理空情况。在一般情况下,使用不同的语言可能不是可行的解决方案。即使groovy是可行的答案,重写运算符也需要与定义Fooadd相同的代码