如何为java对象动态添加属性?
有学生class。
Class Student{ String _name; .... .... public Student(){ } }
是否有可能向Student对象添加动态属性? 没有扩展学生class。
简而言之,是的,可以在运行时修改字节码,但它可能非常混乱,并且(很可能)不是您想要的方法。 但是,如果您决定采用这种方法,我建议使用字节代码操作库,例如ASM。
更好的方法是对“动态”getter和setter使用Map
对不是getter或setter的任何东西使用Map
。 然而,最好的方法可能是重新考虑为什么你需要动态类。
public class Student { private Map properties = new HashMap(); private Map> callables = new HashMap>(); .... .... public String getProperty(String key) { return properties.get(key); } public void setProperty(String key, String value) { properties.put(key, value); } public Object call(String key) { Callable
作为注释,您可以使用Callable并在其中返回null来使用此概念定义void方法。
你可以进入字节码操作,但这种疯狂的方式(特别是对于必须维护代码的程序员)。
将属性存储在Map
。
在运行时将新方法和属性注入类中
Is it possible by just doing using Java?
创建代理对象
虽然你可以用其他人建议的一些棘手而复杂的方式做到这一点。
但是你可以确定你的属性在某些data structure
(适当的一个将是一个Map
)。由于你可以修改你现有的属性,所以可以用你的数据结构来完成。 你可以为它们添加更多属性..这将是一个更好的方法..