我正在尝试构建一个动态获取已实现接口的类。我在下面尝试了以下但它似乎不起作用。我是如何实现这一目标的。
public InterfaceX test(){
InterfaceX x = null;
Class<?> classX = Class.forName("com.TestClassX");
x = (InterfaceX) classX;
return x;
}
编辑: 我不想创建一个实例,因为我只是想调用一个由接口定义的静态方法。
答案 0 :(得分:0)
如果x
是Class
个对象,则无法执行x.staticMethod()
。但是,这可以使用反射。
public interface Interface {
static void method() {
System.out.println("Hello, World!");
}
}
然后,在主课程中你可以这样做。
import java.lang.reflect.*;
public class Main {
public static void invokeMethod(String className) {
try {
Class<?> clazz = Class.forName(className);
Method method = clazz.getDeclaredMethod("method");
method.invoke(null); // null is used for static methods. For instance methods, pass the instance.
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
invokeMethod("Interface");
}
}
这样可行,但您通常应尽量避免使用反射(java.lang.reflect
中的任何内容)。大多数情况下,您可以更好地解决您要解决的问题。