【问题标题】:Can I reference a class by String name?我可以通过字符串名称引用一个类吗?
【发布时间】:2016-03-09 00:23:05
【问题描述】:

我有一个实用程序列表,这些实用程序源自:

abstract public class BaseUtil implements Callable{
    public String name;
    public StreamWrapper data;
    public void setData(StreamWrapper stream){ this.data = stream; }
    private static Class me = BaseUtil.class;
    private static Method[] availableUtilities = me.getDeclaredMethods();
    public static Method[] getUtilities(){ return availableUtilities; }
}

我希望能够在每个节点上为其分配一个实用程序,例如:

Initialize(String utilName){
    activeUtility = utilName;
    gk = new GateKeeper(BaseUtil.getUtilities() <something>);
}

public class GateKeeper {
  GateKeeper(BaseUtil util) {
    this.util = util;
}

private BaseUtil util;

但我不确定如何仅从传入的字符串中获取特定的实用程序类。示例实用程序是:

public class WordLengthUtil extends BaseUtil {
    private String name = "WordLength";
    public Integer call() {
        System.out.println(this.data);
        return Integer.valueOf(this.data.length());
    }
}

【问题讨论】:

  • 你不能直接这样做。但是,在传递的字符串的基础上,您可以使用工厂模式构建不同的对象。

标签: java class-reference


【解决方案1】:

你可以使用反射:

String name = "WordLength";
String className = hashMap.get(name);

Callable plugin = (Callable) Class.forName(className).newInstance();

使用 HashMap 存储类名和字符串标识符之间的绑定

【讨论】:

    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多