2 回答
TA贡献1810条经验 获得超4个赞
在类 Foo 中,您可以将@Getter和@Setter注释放在类上以避免重复(请注意,如果在此类上添加另一个不能公开的私有属性,则应删除@Getter注释,以免公开私有属性):
@Getter
@Setter
public class Foo
关于getWithBytesAndValues方法,我建议你把这种方法放在Foo类中,因为这种方法使get on Foo attrs并设置另一个Foo attrs(业务规则来自域Foo - 参见域驱动设计)。您还可以通过两种方法分离内部逻辑:
public class Foo {
...
public void setBytes()
setByte1();
setByte2();
}
private void setByte2() {
if (getByte2String() != null) {
setByte2(new Base64(getByte2String()).decode());
if (getByte2Value() == null) {
setByte2Value(DEFAULT_BYTE_VALUE);
}
}
}
private void setByte1() {
if (getByte1String() != null) {
setByte1(new Base64(getByte1String()).decode());
if (getByte1Value() == null) {
setByte1Value(DEFAULT_BYTE_VALUE);
}
}
}
}
TA贡献1818条经验 获得超11个赞
每个人都原谅我。JB Nizet的建议要好得多,但我想看看我能做些什么。
public static void touch(
final Consumer<byte[]> setByte,
final Consumer<? super String> setByteValue,
final Supplier<String> byteString,
final Supplier<String> byteValue) {
if (byteString != null) {
setByte.accept(Base64.getDecoder().decode(byteString.get()));
}
if (byteValue.get() == null) {
setByteValue.accept(DEFAULT_BYTE_VALUE);
}
}
touch(
foo::setByte1,
foo::setByte1Value,
foo::getByte1String,
foo::getByte1Value
);
touch(
foo::setByte2,
foo::setByte2Value,
foo::getByte2String,
foo::getByte2Value
);
添加回答
举报