Java动态创建未指定的类

时间:2014-11-25 22:05:05

标签: java class inheritance casting polymorphism

任何了解java的人都会提出快速提问。 我的解释是,这是不可能的,因为类必须在运行时之前显式声明,但我想直接回答。

我能以某种方式做到这一点(短代码):

Class foo extends Object; //There is a class named foo.

public Vector<Object> classVector = new Vector<Object>();

public static void main(String[] args){
    undefinedClassType = foo; //in some way
    classVector.add(new undefinedClassType); //Vector now has a Object that can be casted to foo.
}

只是想知道。感谢您的所有帮助和回复。

2 个答案:

答案 0 :(得分:1)

使用Java Reflection:https://docs.oracle.com/javase/tutorial/reflect/

您可以使用SDK工具在运行时编译一个类,然后将其加载到类加载器中,然后使用反射来实例化它。

  • 使用JavaCompiler在运行时编译类。

  • 然后,使用(已编译的类文件需要在类路径中,以便类加载器可以访问它)将其加载到类加载器中

    Class theClass = Class.forName(“YourClass”);

  • 最后使用反射进行实例化(此示例适用于具有默认构造函数的类)

    YourClass loadedClass =(YourClass)theClass.newInstance();

答案 1 :(得分:1)

在运行时期间使用全新类创建实例的方法是使用Proxy.getProxy()。 您需要为其提供一个实现的接口数组和一个调用处理程序,该处理程序将调用通过此类调用的实际方法。 注意,如果接口可能只是Object,那么你就无法将它转换为一个实例,它的方法在编译期间可以在没有反射的情况下调用。