У меня есть класс 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));
но ошибка возникает
Исключение в потоке «основной» javassist.CannotCompileException: [ошибка источника] serializePrimitive(com.netflix.zeno.serializer.NFSerializationRecord,java.lang.String,double) не найден в HotelSerializer в javassist.CtNewMethod.make(CtNewMethod.java:79 ) в javassist.CtNewMethod.make(CtNewMethod.java:45) в test.demo.javassist.ComponentBuilder.buildHotelSerializer(ComponentBuilder.java:60) в test.demo.javassist.ComponentBuilder.main(ComponentBuilder.java:88) в солнце .reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в 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.java:157) в javassist.compiler .ast.CallExpr.accept(CallExpr.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.compiler.Javac.compile(Javac.java:95) в javassist.CtNewMethod.make(CtNewMethod.java:74) ... еще 8
метод serializePrimitive() определен в суперклассе, но я не могу вызвать его в CtNewMethod?
serializePrimitive()
. Возможно, вы передаете неправильные типы значений или в неправильной последовательности. - person Swastik Padhi   schedule 22.10.2015Object
, а вы указалиdouble
. - person Swastik Padhi   schedule 22.10.2015