在运行时更改类结构或将其放入匿名类中



我有

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扩展它

但是动态修改类是不对的

相关内容

  • 没有找到相关文章

最新更新