使用out反射调用动态java方法

时间:2011-11-15 20:54:09

标签: java

我的数据类型包含100个属性和100个getter方法(getproperty1 .... getproperty100)。

我从用户那里得到了一个输入,如

Property1
Property2
.
.
Property100

如何快速调用此逻辑中的方法

For property1 I need to invoke getproperty1
For propertyI I need to invoke getpropertyI

如何以有效的方式使用if elseswitch声明或反射来完成此操作。

由于

3 个答案:

答案 0 :(得分:2)

你最好的选择可能是某种类型的数组或散列图,并通过索引/键访问它:

public class DataType {
    private Map<String, DataProperty> data = new HashMap<String, DataProperty>();

    public DataProperty getProperty(String key) {
        return data.get(key);
    }

    public void setProperty(String key, DataProperty value) {
        data.put(key, value);
    }
}

虽然,100个属性似乎很多......看看你是否应该分解它或者重新组织它。

答案 1 :(得分:1)

1。如果您需要调用多种方法,我建议使用Strategy设计模式。用最简单的形式你可以尝试

public interface Command<T> {
    public T getProperty();
}

然后根据需要创建尽可能多的实现。

2。如果您只对返回类型感兴趣,而不是真正的调用,那么Map<String, T>将是更好的选择。

3。如果您希望传递计划中的信息,可以使用enum方法

public enum Command {
   Property1("some value"),
   Property2("some other value");

   private String str;
   public Command(String str) {
       this.str = str;
   }

   public String getVal() {
       return str;
   }
}

可以像

一样使用
Command cmd = ...
String value = cmd.getVal();

答案 2 :(得分:1)

您可以将该类重构为Map。如果你有大量像这样的对象,它看起来更像是一个地图的线而不是一个对象。

Map<String, Object>