Java 避免创建对象时使用if语句

Java 避免创建对象时使用if语句,java,reflection,immutability,Java,Reflection,Immutability,我有一个遗留应用程序,它处理不可变对象,这些对象在每个构造函数中创建时进行一些验证。每个对象都有自己的验证,f。例如长度检查、范围检查等 业务对象看起来像: public class MyObject { private FieldA fieldA; private FieldB fieldB; ... } 这些对象是通过调用加载数据的cobol服务器创建的。。。这段代码看起来很脏: if (isFieldSet(response.getValueA())) { myO

我有一个遗留应用程序,它处理不可变对象,这些对象在每个构造函数中创建时进行一些验证。每个对象都有自己的验证,f。例如长度检查、范围检查等

业务对象看起来像:

public class MyObject {
   private FieldA fieldA;
   private FieldB fieldB;
   ...
}
这些对象是通过调用加载数据的cobol服务器创建的。。。这段代码看起来很脏:

if (isFieldSet(response.getValueA())) {
   myObject.setFieldA(new FieldA(response.getValueA()));
}

if (isFieldSet(response.getValueB())) {
   myObject.setFieldA(new FieldA(response.getValueB()));
}

...
因为有很多对象,所以也有很多if语句。 我可以使用反射来改进它,并动态创建类

myObject.setFieldA(createField(A.class, response.getValueA()));
myObject.setFieldA(createField(B.class, response.getValueB()));
这使我的代码更好,但速度也慢得多。有人认为有什么优雅的方法可以解决这个问题吗

问候,


Mike

如果我没弄错,你想去掉这么多If语句。如果您使用一些模板引擎来接受响应并相应地返回输出,这不是很好吗?美妙之处在于,模板中只能有一个If语句,它根据输入响应驱动对象创建逻辑。
试试看。

如果我理解正确,你会想要去掉那么多If语句。如果您使用一些模板引擎来接受响应并相应地返回输出,这不是很好吗?美妙之处在于,模板中只能有一个If语句,它根据输入响应驱动对象创建逻辑。
试试。

到底是什么问题?丑陋的代码仍然有效。做出这一改变的回报是什么?看起来像是一个候选人。是的,你是对的,代码正在工作,并且将在未来几年正常工作。但是是的。。。我认为代码不仅应该工作。工厂方法将是一个解决方案,但我有上百个这样的不可变值对象。您可能会发现,实际上获取反射元素、
Method
s和
Constructor
s等在CPU周期方面非常昂贵,但实际上执行
。invoke(…)
不是,因为这只是堆叠呼叫,然后进行跳转。如果可以,试着让
createField
聪明地缓存通过反射获得的东西。到底是什么问题?丑陋的代码仍然有效。做出这一改变的回报是什么?看起来像是一个候选人。是的,你是对的,代码正在工作,并且将在未来几年正常工作。但是是的。。。我认为代码不仅应该工作。工厂方法将是一个解决方案,但我有上百个这样的不可变值对象。您可能会发现,实际上获取反射元素、
Method
s和
Constructor
s等在CPU周期方面非常昂贵,但实际上执行
。invoke(…)
不是,因为这只是堆叠呼叫,然后进行跳转。如果可以,试着让
createField
聪明地缓存通过反射获得的东西。