我有
class A
{
String a;
String b;
//..getters, setters
}
现在我有ArrayList<? extends Object> resultData
保存类A和其他一些类的对象。基本上,我需要这个列表'resultData'在其他一些API中生成Json文件。
现在我的问题是在添加类A对象到列表&我需要修改类a对象(或任何其他匿名类对象),如:
class A
{
String a;
//..getters, setters
}
是类A的一个特定对象,不应该有字段String b(在批评之前,我这样做是因为我需要为我的特定JSon格式修改对象&我不想定义一个只使用一次的新类定义)
我的最后一个选项是使匿名类像这样:(&然后添加到我的列表中)
Object ob = new Object{
String b;
//..getters, setters
}
还请建议任何其他方法创建匿名类所需的结构。
Java不允许在运行时更改类或创建新类。
这是可能的与大量的努力,像生成java字节码使用字节码库如BCEL(http://commons.apache.org/proper/commons-bcel/),甚至生成.java
文件和运行javac
生成字节码。
您可以简单地使用像Map<String,Object>
这样的散列映射来"模拟"一个可以接收任意字段的对象。如果您确实需要完全可配置的类,我会这样做。当然,您不可能为每个属性都有很好的getter和setter。
但是为什么你需要一个好的setter/一个好的类呢?由于类的结构是在运行时确定的,因此您不能编写依赖于该类的代码,因为您不知道它将是什么样子。
如果我得到你正确,你需要摆脱字段序列化,json格式,如果我是对的,那么让你的字段transient
另一个解决方案是用你想要序列化的字段创建超类,并使A
扩展它
但是动态修改类是不对的