Chciałbym utworzyć implementację w środowisku wykonawczym dla klasy abstrakcyjnej za pomocą Bajt Buddy i mam do czynienia z problemem, który jest zgłaszany podczas wywoływania metody z utworzonej instancji . Mam istniejący abstract
klasę tak (który tak naprawdę nie można modyfikować i który rzeczywiście zawiera więcej logiki):Bajt Buddy: Utwórz implementację dla abstrakcyjnej klasy
public abstract class Algorithm {
abstract int execute();
}
stosując następującą minimalną próbkę, chciałbym moje wystąpienie Algorithm
powrót stałą wartość:
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());
jednak ten prowadzi do następującym wyjątkiem:
Exception in thread "main" java.lang.AbstractMethodError: package.Algorithm.execute()I
(kiedy eksperymentalnie zmienić Algorithm
do interface
, wszystko działa dobrze, ale to nie rozwiązuje mojego konkretnego problemu).
Dziękuję Ci Rafael za bardzo szczegółowe wyjaśnienie, ponieważ szansa będzie to mieć, właśnie odkryłem dwie minuty temu, że przyczyną mojego problemu był fakt, że abstrakcyjną metodą był pakiet prywatny. "WTRYSK" to moje rozwiązanie. Btw, świetna robota na Byte Buddy! – qqilihq