繁体   English   中英

根据条件访问 Java 中的字段

[英]Accessing field in Java based on condition

在评估某些条件时,我必须编写一个实用方法,该方法可以从 Object 获取特定变量值。

以下是要求。

  1. 如果“名称”作为类型调用“getName”来获取值。
  2. 如果“子类型”作为类型调用“getSubType”来获取子类型值。

当前解决方案:

       public Object getFieldValue(String type, IDTO dto){
        Method method = dto.getClass().getMethod("get"+createMethodName(type));
        Object returnedObject = method.invoke(dto, null);
        return returnedObject;
     }

但是,操作非常繁重,并且会带来性能问题。 有没有可以选择的替代方案或任何更好的方法来做到这一点。

其他要点:

  1. 接口 IDTO 只声明了所有的 getter setter。 没有在其中声明的字段。

如果您需要性能,我建议对实用程序方法使用代码生成来对 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM