给出其.class(MyClass.class)的类的返回和实例

时间:2010-05-26 07:40:41

标签: java

我有一个枚举,可以保存我的算法。我无法实例化这些类,因为我需要应用程序上下文,该应用程序上下文仅在应用程序启动后才可用。我想通过调用getAlgorithm(Context cnx)来选择在运行时加载类。

如何在运行时使用.class(我的构造函数接受参数)轻松实例化一个类?我的所有类都是算法的子类。

public enum AlgorithmTypes {
ALL_FROM_9_AND_LAST_FROM_10_ID(AlgorithmFactory.AlgorithmAllFrom9AndLastFrom10Impl.class),
ALL_FROM_9_AND_LAST_FROM_10_CURRENCY_ID(AlgorithmFactory.AlgorithmAllFrom9AndLastFrom10Impl.class),
DIVIDE_BY_9_LESS_THAN_100(AlgorithmFactory.AlgorithmAllFrom9AndLastFrom10Impl.class),
TABLES_BEYOND_5_BY_5(AlgorithmFactory.AlgorithmAllFrom9AndLastFrom10Impl.class);

private Class<? extends Algorithm> algorithm;

AlgorithmTypes(Class<? extends Algorithm> c) {
    algorithm = c;
}

public Algorithm getAlgorithm(Context cnx) {
    return //needs to return the current algoriths constructor which takes the Context Algorithm(Context cnx);
}

}

2 个答案:

答案 0 :(得分:1)

您可以使用Class。getConstructor()函数来获取构造函数,然后您可以使用Constructor。newInstance()来实例化类,同时将参数传递给构造函数。

答案 1 :(得分:1)

java.lang.Class<T> 拥有您需要的所有魔力,特别是您可以使用forName()getConstructor()方法获得您想要的效果,如下所示:< / p>

public Constructor getAlgorithm(Context cnx) {
    Class klass = Class.forName("YourClassName"));
    Constructor constructor = klass.getConstructor(cnx.getClass());
    return constructor;
}

如果你希望getAlgorithm返回一个实例而不仅仅是要调用的构造函数,你可以调用构造函数:

public Algorithm getAlgorithm(Context cnx) {
    Class klass = Class.forName("YourClassName"));
    Constructor constructor = klass.getConstructor(cnx.getClass());
    return constructor.newInstance(ctx);
}