如何为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 = callables.get(key); if (callable != null) { return callable.call(); } return null; } public void define(String key, Callable callable) { callables.put(key, callable); } } 

作为注释,您可以使用Callable并在其中返回null来使用此概念定义void方法。

你可以进入字节码操作,但这种疯狂的方式(特别是对于必须维护代码的程序员)。

将属性存储在Map

在运行时将新方法和属性注入类中

 Is it possible by just doing using Java? 

创建代理对象

虽然你可以用其他人建议的一些棘手而复杂的方式做到这一点。

但是你可以确定你的属性在某些data structure (适当的一个将是一个Map )。由于你可以修改你现有的属性,所以可以用你的数据结构来完成。 你可以为它们添加更多属性..这将是一个更好的方法..