女士们先生们,
我是Java新手,请原谅我,如果它很明显,但我还没发现很多.
我想在运行时为类创建动态属性(变量)(定义一个可以在运行时通过添加或更改属性和方法来更改的对象).
原因:我想在GAE中存储一个数据模型,可以在编译应用程序后动态扩展(是的,DataStore允许).应该添加哪些属性也存储在DataStore中(这就像使用机器人来构建机器人......有趣).
Python允许我在运行时添加属性.Groovy似乎也允许这样做."纯粹的"Java世界中唯一指向该方向的东西似乎是"动态代理".
但是,如果他们能做到这一点,我还无法弄明白.
Java无法动态添加属性.它也没有能力在运行时动态创建类或在运行时更改它们.Java强烈且静态地键入.你能做的最好的事情就是将这些属性放入Map
或类似.
编辑:好的,显然有些澄清是有序的.该OP特别提到GAE,其中没有一种方法都在工作,但我会提到他们,因为一些人似乎不以为然他们的缺席.
在Java编译器API(Java的6+)可以让你在运行时编译Java类.从技术上讲,您可以编写一个Java源文件来查看您想要的内容,编译并加载它.
Java字节码库可以在运行时重写类.这被JPA(和其他)等库使用.你可以用这种方式修改类.
然而,OP指的是a)参考GAE和b)更多按照Javascript如何允许您通过动态添加,删除或更改属性来修改运行时的类或特定实例的顺序.Java肯定不会这样做,特别是在GAE上没有.
上面的例子就不像是char *
在C++中使用类,因此你可以阅读私有成员并不意味着C++没有私有成员.您实际上是使用这两种方法绕过Java运行时,即使它们是Java的一部分.