我有一个枚举,可以保存我的算法。我无法实例化这些类,因为我需要应用程序上下文,该应用程序上下文仅在应用程序启动后才可用。我想通过调用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);
}
}
答案 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);
}