ClassPool classPool = ClassPool.getDefault();
CtClass person = classPool.get("main.Person");
CtClass pperson = classPool.makeClass("PPerson", classPool.get("main.Person")); //is sub-type
CtField dadField = new CtField(person, "dad", pperson);
dadField.setModifiers(Modifier.PUBLIC);
pperson.addField(dadField);
CtField momField = new CtField(person, "mom", pperson);
momField.setModifiers(Modifier.PRIVATE);
pperson.addField(momField);
CtMethod momGetter = CtNewMethod.getter("getMom", momField);
pperson.addMethod(momGetter);
CtMethod momSetter = CtNewMethod.setter("setMom", momField);
pperson.addMethod(momSetter);
Class ppersonClass = pperson.toClass();
Person pp = (Person) ppersonClass.newInstance();
pp.setFirstname("a");
pp.setLastname("b");
Person mom = new Person(); mom.setFirstname("momi"); mom.setLastname("momi");
for (Method m : ppersonClass.getDeclaredMethods()) {
System.out.println(m.getName());
}
//--------------
Method setMom = ppersonClass.getDeclaredMethod("setMom", Person.class);
setMom.invoke(pp, mom);
Method getMom = ppersonClass.getDeclaredMethod("getMom", Person.class);
输出是:
getMom setMom java.lang.NoSuchMethodException:PPerson.getMom(main.Person) at java.lang.Class.getDeclaredMethod(Unknown Source) 在main.Main.main(Main.java:69)
为什么第二次看不到“getMom”字段?
答案 0 :(得分:0)
因为表达式getDeclaredMethod("getMom", Person.class)
查找带有getMom
类型的形式参数的方法Person
,因为您创建的getter没有任何正式参数,因此该参数不存在参数。因此NoSuchMethodException。