【问题标题】:Java: Using Dynamically loaded classesJava:使用动态加载的类
【发布时间】:2011-02-19 22:41:12
【问题描述】:
我是 Java 新手。
我正在尝试在我的应用程序中使用一些动态加载的类。
该应用程序不知道类,只是尝试按名称加载一个类,其名称来自输入。
它不知道类(所以我不能使用强制转换),但只需要调用该类的一些方法(每个类都应该具有该方法)。
我想到了接口,但我不知道如何。
我该如何调用这些方法?
谢谢
【问题讨论】:
标签:
java
reflection
class
dynamic
load
【解决方案1】:
给定
Class k = loadMyClassDynamically();
你可以
Method m = k.getDeclaredMethod("methodName", ArgClass1.class, ArgClass2.class);
那么,如果你创建一个 k 的实例
Object ki = k.getDeclaredConstructor().newInstance();
你可以调用ki上的方法
m.invoke(ki, ArgClass3.class, ArgClass4.class);
详情请见the reflection tutorial。
【解决方案2】:
是的,您可以使用Class 类。
public InterfaceType getDynamicClass(String className) {
return (InterfaceType) Class.forName(className).newInstance();
}
接口是为了保证方法存在。当然,您必须注意异常并为您的应用程序适当地处理它们。
【解决方案3】:
嗯,你会想要使用接口或者你继承的基类。这样,您可以在运行时调用您正在创建的对象的一组预定义方法。
要做到这一点,您可能必须使用反射来创建基于(文本?)输入的实例。