投一个动态获取的class
Cast a class that is dynamically obtained
我正在尝试转换我动态获取的已实现接口的 class。我在下面尝试了以下但它似乎不起作用。我是如何实现的。
public InterfaceX test(){
InterfaceX x = null;
Class<?> classX = Class.forName("com.TestClassX");
x = (InterfaceX) classX;
return x;
}
编辑:
我不想创建一个实例,因为我只是想简单地调用接口定义的静态方法。
如果 x
是一个 Class
对象,则不能执行 x.staticMethod()
。但是,这可以使用反射。
public interface Interface {
static void method() {
System.out.println("Hello, World!");
}
}
然后,主要class你可以这样做。
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
中的任何内容)。大多数情况下,您要解决的问题都有更好的解决方案。
我正在尝试转换我动态获取的已实现接口的 class。我在下面尝试了以下但它似乎不起作用。我是如何实现的。
public InterfaceX test(){
InterfaceX x = null;
Class<?> classX = Class.forName("com.TestClassX");
x = (InterfaceX) classX;
return x;
}
编辑: 我不想创建一个实例,因为我只是想简单地调用接口定义的静态方法。
如果 x
是一个 Class
对象,则不能执行 x.staticMethod()
。但是,这可以使用反射。
public interface Interface {
static void method() {
System.out.println("Hello, World!");
}
}
然后,主要class你可以这样做。
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
中的任何内容)。大多数情况下,您要解决的问题都有更好的解决方案。