曾经有人建议我如何将getter和setter动态添加到现有类中?我需要创建同一个类的实例以供进一步使用。我将在编译时上 Pojo 类。在运行时读取属性文件并需要创建 getter 和 setter 那些实体
问问题
6650 次
5 回答
2
Java 没有内置的方法来添加全新的方法。您可以尝试使用嵌入式脚本引擎 (http://docs.oracle.com/javase/6/docs/api/javax/script/package-summary.html),然后使用 Javascript、jRuby、Groovy 等。那些语言将根据您的需要提供更多运行时功能,并且应该能够与您的 java 代码进行交互。
于 2012-11-07T05:25:13.533 回答
0
您可以为它创建一个包装器:
public class MyWrapper extends TheClass {
private TheClass theClass;
//getter/setters
}
于 2012-11-07T05:16:44.677 回答
0
如前所述,不可能,因为不允许动态修改类。
如果现有类上有一个接口可以改用,则可以使用 Java 的动态代理支持来添加 getter 和 setter。
private static class InstanceProxy implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
// Do logic based on method name
}
}
并使用java.lang.reflect.Proxy.newProxyInstance
.
这些代理对象将具有给定的接口和调用方法的动态逻辑。
于 2012-11-07T05:24:43.613 回答
0
根据您的编辑,最好Map<String, String>
在 POJO 内部有一个在运行时加载新属性/值:
public class SomePojo {
private int intAttribute;
private String stringAttribute;
private Map<String, String> dynamicProperties = new HashMap<String, String>();
//getters and setters...
}
public class BLClass {
public static void loadProperties(Properties properties, SomePojo pojo) {
Enumeration<?> enumeration = properties.propertyNames();
while (enumeration.hasMoreElements()) {
String key = (String) enumeration.nextElement();
String value = properties.getProperty(key);
pojo.getDynamicProperties().put(key, value);
}
}
}
于 2012-11-07T05:26:13.323 回答