转换动态获取的类

时间:2016-04-14 18:55:58

标签: java generics casting classloader

我正在尝试构建一个动态获取已实现接口的类。我在下面尝试了以下但它似乎不起作用。我是如何实现这一目标的。

public InterfaceX test(){

 InterfaceX x = null;
 Class<?> classX = Class.forName("com.TestClassX");
 x = (InterfaceX) classX;
 return  x;

}

编辑: 我不想创建一个实例,因为我只是想调用一个由接口定义的静态方法。

1 个答案:

答案 0 :(得分:0)

如果xClass个对象,则无法执行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中的任何内容)。大多数情况下,您可以更好地解决您要解决的问题。