我想在運行時爲使用Byte Buddy的抽象類創建一個實現,我面臨的問題是從創建的實例調用方法時拋出java.lang.AbstractMethodError
。我有一個現有的abstract
類這樣的(這我其實不能修改和實際上包含更多的邏輯):Byte Buddy:爲抽象類創建實現
使用下面的最少的樣品,我想我的Algorithm
實例返回一個恆定值:
Class<?> type = new ByteBuddy()
.subclass(Algorithm.class)
.method(ElementMatchers.named("execute"))
.intercept(FixedValue.value(42))
.make()
.load(classLoader, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
Algorithm instance = (Algorithm) type.newInstance();
System.out.println(myInstance.execute());
然而,這會導致以下異常:
Exception in thread "main" java.lang.AbstractMethodError: package.Algorithm.execute()I
(當我實驗改變Algorithm
到一個interface
,一切工作正常,但這並不能解決我的具體問題)。
正確的運行方法謝謝您拉斐爾的非常詳細的解釋,因爲機會將有它,我只是發現了兩分鐘前,我的問題的根源是由引起事實上,抽象方法是封裝私有的。 '注射'是我的解決方案。順便說一句,在Byte Buddy上做得很好! – qqilihq