我有一個程序使用JCodemodel和動態類加載器來生成類。我解析一個yaml文件,生成所需的類並映射文件的結構。目前一切都很好。系統類加載器不使用重寫方法
Snakeyaml處理解析和寫得很好,所以類的定義如果罰款。
然後我嘗試訪問在yaml中重新定義的屬性()的方法。我首先加載文件到一個「樹」,加載它的根元素作爲「計算」,並打印它的類和方法;然後我調用重寫的方法。 computeb類是動態生成的,以及computeb $屬性。
這裏是代碼(我換成短的我的包):
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()
(...)
properties( )class is mypackage.Compute $ Property
正如您所看到的,該類有兩個存在的方法,但是所調用的properties()方法是第二個方法。我想調用第一個(在類加載器中定義的)。爲什麼會發生這種情況?我該怎麼辦 ?
看起來像'c.properties()'返回'mypackage.Compute $ Property'的對象。你有沒有嘗試調用'c.properties()。properties()'? –
Compute $ Propertiy沒有property()方法。 – guigolum