まず、私が抽象クラスを持っていると仮定して、それをAbstractClassという名前にします。たとえば、あるクラスがあるとします。クラスAとしましょう。 ClassAはAbstractClassを拡張します。 ClassAはフォルダに保存されます。 (これは、クラスパスにロードする必要があります。)今 動的にロードされたクラスを参照してコンパイル
、私はプログラム内で新しいクラスを書いていること
ClassB
を仮定し、私はClassBのはにClassAを参照できるようにしたいです。
public class ClassB extends AbstractClass {
ClassA A = new ClassA();
public void F() {
A.F();
}
}
の線に沿って何かが今、私はクラスAを取得し、動的にそれを使用するクラスローダを使用して何の問題もなかったしています。また、ユーザー入力に基づいてClassAのようなクラスを動的に作成し、プログラム内でコンパイルし(ecj.jarを使用して)、それをロードしてメソッドを呼び出しても問題はありませんでした。
私は現在、動的にロードされているクラスを、動的に作成してコンパイルしているクラスで参照する方法は分かりません。輸入等の書き方が分かりません。クラスAを入れて入れています
import classA;
にclassB.javaファイルへのトリックはありません。
これは私の最初の質問StackOverflow(長い時間の読者)ですので、私に簡単に行きます。前もって感謝します。
-
コンテキスト:ユーザーが入力した確率分布を使用するプログラム。私は抽象クラスAbstractDistributionを持っています。この抽象クラスは、ディストリビューションのCDF、PDF、逆CDFなどの抽象メソッドを持っています。これまでは、AbstractDistributionを拡張したコンパイルとロードを動的に記述し、newInstance()を取得し、他のクラス。しかし、Dist1を作成して動的にロードした場合、Dist1のPDFなどを呼び出すことができるDist2を作成したいと考えています。
なぜクラスBはクラスAを拡張できませんか? – Jasonw
@jasonw、上記の例は本当に削除された例です。私がClassA1とClassB1クラスを持っていたとしましょう。 'class ClassB { ClassA1 A1 = new ClassA1(); ClassA2 A2 =新しいClassA2(); public void F(){ A1.F(); A2。F(); } } ' – richard
大丈夫リチャード、いくつかの教祖はここでいくつかの光を放つだろう、私は望みます:-) – Jasonw