这个问题已经在这里有一个答案:
- 可以在Java类在运行时的方法添加到自己? 10个回答
是否有可能通过Java反射的方法添加到类?
public class BaseDomain {
public BaseDomain(){
Field[] fields = this.getClass().getDeclaredFields();
for(int i=0; i<fields.length; i++){
String field = fields[i].toString();
String setterMethod = "public void set" + field.toLowerCase();
//Now I want to add this method to this class.
}
}
}
不,不是通过反射。
反思询问类及其成员,你可以改变字段,但不能创建新的。 您不能添加新的方法。
可以使用AA 字节码操作库添加方法,以班; 但你为什么要?
你不能无论如何调用的方法,除了通过反射,因为他们显然不会在编译时存在。
也许看看项目龙目岛 -这是一个注释预处理程序,可以在编译时添加方法的类。 只要你的类注释正确它将添加getter和setter方法自动的。
不可以,你无法通过反射添加方法。 在这种情况下,我会使用脚本语言一样的BeanShell 2 。 这里有一个DynamicObject类
public class DynamicObject
{
bsh.Interpreter interpreter = null;
public DynamicObject()
{
interpreter = new bsh.Interpreter();
}
public void addToSource(String... method)
{
try
{
String main = "";
for (int i=0; i<lines.length; i++){
main += lines[i] + "\n";
}
interpreter.eval(main);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public Object invoke(String methodname, Object... args)
{
try
{
return interpreter.getNameSpace().invokeMethod(methodname, args, bsh);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public Object invoke(String methodname)
{
return invoke(methodname, (Object[])null);
}
}
现在一个例子动态物体看起来像
DynamicObject testObj = new DynamicObject();
testObj.addToSource(
"public int add ( int a, int b )",
"{",
"return a+b;",
"}"
);
int added = testObj.invoke( "add", 5, 4 ); // is 9