[英]Accessing field in Java based on condition
在评估某些条件时,我必须编写一个实用方法,该方法可以从 Object 获取特定变量值。
以下是要求。
当前解决方案:
public Object getFieldValue(String type, IDTO dto){
Method method = dto.getClass().getMethod("get"+createMethodName(type));
Object returnedObject = method.invoke(dto, null);
return returnedObject;
}
但是,操作非常繁重,并且会带来性能问题。 有没有可以选择的替代方案或任何更好的方法来做到这一点。
其他要点:
如果您需要性能,我建议对实用程序方法使用代码生成来对 IDTO 对象进行所需的访问。 通常这将被集成到构建中。 您生成的方法可以为每个“类型”使用性能良好的 switch 语句,例如:
/**
* Utility for generic access to IDTO object properties.
* GENERATED code, do not change! See template ....
*/
public Object getFieldValue(String type, IDTO dto){
switch (type) {
case "name" : return dto.getName();
case "subtype" : return dto.getSubtype();
...
}
// ERROR handling
throw new RuntimeException("unknown property");
}
要实现您的生成器代码,您可以像上面的代码一样使用反射。 为了更广泛地使用这种方法,我建议引入一个简单的模板引擎,例如https://freemarker.apache.org
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.