私はJCodemodelと動的クラスローダーを使用してクラスを生成するプログラムを持っています。私はyamlファイルを解析し、必要なクラスを生成し、ファイルの構造をマップします。これまではすべてが問題ありません。システムクラスローダーはオーバーライドされたメソッドを使用しません
Snakeyamlは解析を行い、うまく書くので、クラスの定義は問題ありません。
次に、yamlで再定義されたプロパティ()にアクセスしようとしています。
まずファイルを「ツリー」にロードし、そのルート要素を「計算」としてロードし、そのクラスとメソッドを出力します。私はオーバーライドされたメソッドを呼び出します。 computebクラスが動力学的に生成され、computeb $ Propertiesも生成されます。
ここコード(私は短いもので、私のパッケージを置き換え)です:
Tree tree = Parser.load(new FileInputStream("src/test/resources/tree.yaml"));
mypackage.Compute c = (mypackage.Compute) tree.root();
System.err.println("class : " + c.getClass());
for (Method m : c.getClass().getMethods()) {
System.err.println(" method : " + m);
}
System.err.println("properties() class is " + c.properties().getClass().getName());
結果は次のとおりです。
クラス:クラスcomputeb
方法:公共computeb $プロパティcomputeb.properties ()
メソッド:public mypackage.Compute $プロパティmypackage.Compute.properties()
(...)
プロパティ)クラスはmypackage.Compute $ Propertyです。
気付いたように、クラスには2つのメソッドがありますが、呼び出されるproperties()メソッドは2番目のメソッドです。私は最初のもの(クラスローダーで定義されているもの)を呼びたいと思います。なぜそれがこのように起こるのですか?私は何をすべきか ?
'c.properties()'のように見えると、 'mypackage.Compute $ Property'のオブジェクトを返します。 'c.properties()。properties()'を呼び出そうとしましたか? –
Compute $ Propertiyにはproperties()メソッドがありません。 – guigolum