Javassist, как вызвать метод, определенный в суперклассе
У меня есть класс NFTypeSerializer и я использую javassist для создания подкласса NFTypeSerializer
CtClass superCc = pool.get(NFTypeSerializer.class.getName());
CtClass cc = pool.makeClass("HotelSerializer", superCc);
и я хочу переопределить метод doSerialize(), который определен в NFTypeSerializer
cc.addMethod(CtNewMethod.make("protected void doSerialize(Hotel value, NFSerializationRecord rec) {\n" +
" serializePrimitive(rec, \"name\", value.getName());\n" +
" serializePrimitive(rec, \"price\", value.getPrice());\n" +
" }", cc));
но ошибка возникает
Исключение в потоке "main" javassist.CannotCompileException: [ошибка источника] serializePrimitive(com.netflix.zeno.serializer.NFSerializationRecord,java.lang.String,double) не найден в HotelSerializer по адресу javassist.CtNewMethod.make(CtNewMethodj.) в javassist.CtNewMethod.make(CtNewMethod.java:45) в test.demo.javassist.ComponentBuilder.buildHotelSerializer(ComponentBuilder.java:60) в test.demo.javassist.ComponentBuilder.u.jpg в компоненте (компонент).reflect. (Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) Причина: ошибка компиляции: serializePrimitive(com.netflix.zeno.serializer.NFSerializationRecord,java.lang. Строка, двойная) не найдена в HotelSerializer на javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:723) по адресу javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:688) по адресу javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.jav:all.prise.prise.price.prise.price.prise.prise.prise.prise.prise.prise.cr..java:46) по адресу javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242) по адресу javassist.compiler.CodeGen.atStmnt(CodeGen.java:330) по адресу javassist.compiler.ast.Stmnt.accept(Stmnt.java:50) в javassist.compiler.CodeGen.atStmnt(CodeGen.java:351) в javassist.compiler.ast.Stmnt.accept (Stmnt.java:50) в javassist.compiler.CodeGen.atMethodBody(CodeGen.java:292) в javassist.compiler.CodeGen.atMethodDecl(CodeGen.java:274) в javassist.compiler.ast.MethodDecl.accept(MethodDecl.java:44) в javassist.compiler.Javac.compileMethod(Javac.java:169) в javassist.java:169) в.Javac.compile(Javac.java:95) на сайте javassist.CtNewMethod.make(CtNewMethod.java:74) ... еще 8
метод serializePrimitive() определен в суперклассе, но я не могу вызвать его в CtNewMethod?
1 ответ
Пожалуйста, проверьте конструкторы, объявленные для serializePrimitive(). Вы можете передавать неправильные типы значений или в неправильной последовательности.
Поставляемые параметры-
serializePrimitive(NFSerializationRecord rec, String fieldName, double value)
Ожидаемые параметры-
serializePrimitive(NFSerializationRecord rec, String fieldName, Object value)