【发布时间】:2012-03-29 05:00:26
【问题描述】:
首先假设我有一个抽象类,我们称它为 AbstractClass。假设
public abstract AbstractClass {
public abstract void F();
}
假设我有一个类,我们称它为 ClassA。 ClassA 扩展了 AbstractClass。 ClassA 保存在一个文件夹中。 (它必须加载到类路径中。)现在假设我正在程序中编写一个新类,
ClassB
并且我希望 ClassB 能够引用 ClassA。类似于
public class ClassB extends AbstractClass {
ClassA A = new ClassA();
public void F() {
A.F();
}
}
现在,我使用类加载器来获取 classA 并动态使用它没有任何问题。我也没有问题根据用户输入动态编写像 ClassA 这样的类,在程序中编译它(使用 ecj.jar),然后加载它并从中调用方法。
我不知道如何在我现在正在编写和动态编译的类中引用动态加载的类。不知道怎么写导入等。加载classA并放入
导入类A;
进入 classB.java 文件并不能解决问题。
这是我关于 StackOverflow(长期读者)的第一个问题,所以请放轻松。提前致谢。
--
上下文:使用用户输入的概率分布的程序。我有一个抽象类 AbstractDistribution,它具有分发的 CDF、PDF、逆 CDF 等的抽象方法。到目前为止,这工作得很好,动态编写编译和加载扩展 AbstractDistribution 的分发,获取它们的 newInstance() 并像任何一样使用它们其他类。但是,如果我已经编写并动态加载了分发 Dist1,我希望能够编写一个可以调用(例如)Dist1 的 PDF 的 Dist2。
【问题讨论】:
-
为什么B类不能扩展A类?
-
@jasonw,上面的例子是一个非常精简的例子。假设我有 ClassA1 和 ClassB1,我可能想要 `class ClassB { ClassA1 A1 = new ClassA1(); ClassA2 A2 = new ClassA2();公共无效 F() { A1.F(); A2.F(); } } `
-
好的,Richard,我希望一些大师能在这里阐明一些观点:-)
标签: java dynamic compiler-construction classloader