Jestem początkującym Javassist, i już przeczytałem kilka tutoriali związanych z tym.Czy możemy dodać nieparzyste pole do istniejącej klasy przy użyciu javassist?
Ponieważ potrzebuję wykonać zastrzyk kodu bajtowego w każdej metodzie, wejdź do lub przed wyjściem z metody i uzyskaj statystyki z tego.
przez samouczek javassit internetowym, uważam, że możemy zrobić nowe pole do istniejącego Klasa:
CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(CtClass.intType, "z", point);
point.addField(f);
Ale typ CtField zawiera tylko prymitywny typ domyślnie, możemy dodać nowe pole którego typ jest nieprosty, na przykład ArrayList?
Czy mogę dodać nowe pole ArrayList do istniejącej klasy, ponieważ klasa nie importuje java.util.ArrayList, spowoduje błąd kompilacji?
Dzięki, powyższy kod oznacza, że dodamy nowy jakaśLista członek ArrayList do klasy punkt, ale w klasie punkcie my nie zrobił” t zaimportować java.util.ArrayList, spowoduje to błąd kompilacji? – LifeOnCodes
Cóż, dodawanie *** bajtowego kodu ***, który reprezentuje pole java.util.ArrayList, a nie faktyczny ciąg w języku angielskim. Instrukcje importu są jedynie dyrektywami kompilatora, które nie pojawiają się w skompilowanym pliku klasy. Co jest przy okazji, dlaczego musisz używać w pełni kwalifikowanej nazwy (FQN) podczas wyszukiwania klas w ClassPool. – Perception
Wielkie dzięki, widzę. Myślę, że powinienem poświęcić trochę czasu na studiowanie kodu bajtowego. Jeszcze jedno pytanie, mam nadzieję, że możesz mi pomóc, czy jest możliwe, że memember someList jest typem generycznym, takim jak ArrayList someList? –
LifeOnCodes