我有一个名为 java 库testlib.jar,它有一个抽象类,如下所示:
com.test;
public abstract class AbstractClass {
public abstract void foo();
}
和一个命名MyClass如下的类:
com.test;
public class MyClass extends AbstractClass{
@Override
public void foo() {
System.out.println("foo is called in MyClass");
}
}
就是这样。在我的应用程序中,我有一个抽象类,如下所示:
com.test;
public abstract class AbstractClass {
public abstract void foo();
}
所以它和testlib.jar. 在这里,我加载了testlib.jar文件并实例化了一个对象MyClass并将其强制转换为我的应用程序已知的抽象类(第二个):
URLClassLoader urlClassLoader = new URLClassLoader(
new URL[]{new URL("file:\\path\\to\\testlib.jar")});
Class<AbstractClass> MyClass = (Class<AbstractClass>)urlClassLoader.loadClass("com.test.MyClass");
Constructor<AbstractClass> c = MyClass.getConstructor();
AbstractClass myObject = c.newInstance();
myObject.foo();
输出:
foo is called in MyClass
请注意,我正在投射MyClass到一个实际上不是它的父类的类。
知道这里我有两个问题:
1- 这种方法是否适用于所有 JVM?
2- JVM 如何在内部处理这个转换操作?
莫回无
12345678_0001
相关分类