非常了解 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.
}
只是想知道。感谢您的所有帮助和回复。
最佳答案
使用 Java Reflection 来解决这个问题:https://docs.oracle.com/javase/tutorial/reflect/
您可以使用SDK工具在运行时编译一个类,然后将其加载到类加载器中,然后使用反射来实例化它。
使用JavaCompiler用于在运行时编译类。
然后,使用以下命令将其加载到类加载器中(编译后的类文件需要位于类路径中,以便类加载器可以访问它)
Class theClass = Class.forName("YourClass");
最后使用反射进行实例化(此示例适用于具有默认构造函数的类)
你的类loadClass = (YourClass)theClass.newInstance();
关于Java动态创建未指定的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27137613/