任何了解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.
}
只是想知道。感谢您的所有帮助和回复。
答案 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
,那么你就无法将它转换为一个实例,它的方法在编译期间可以在没有反射的情况下调用。