在用户定义的对象中动态实例化字段

时间:2018-10-15 19:00:17

标签: java

需要使用方法参数中传递的字段名称动态创建对象。

类似..

public void createDisplay(List<String> fields) {
//fetch fields names
//create an object in java using the fields passed
//assign values to the dynamically created fields.
}

public void createDisplay(Schema schema) {
//create an object in java using the schema
//assign values to the dynamically created fields.
}

任何人都可以帮忙。

2 个答案:

答案 0 :(得分:0)

您的问题有点含糊。如果您确实希望从您的方法中创建完全初始化的对象,那么我建议您执行以下操作:

public void createDisplay(List<String> fields) {
//Iterate over the list do null checking wherever required
//call parameterized constructor of your class and pass values in the loop and keep on adding them
//change the return type of method from void to the object/list of object 
//you want and return it from this method
}

答案 1 :(得分:0)

除非您完全确定自己在做什么,否则在运行时确实不值得。相反,将这种精力投入到编译时解决方案中可能更有价值。

那里有一个名为ByteBuddy的库,它具有动态生成类型的能力,但是我不认为在这方面有很多实用程序,因为您想创建一个正确地输入类型。您将面临的最大问题是:

  • 如果您有多个活动的类加载器,则很可能在运行时遇到难以诊断的错误,这将使您的应用程序崩溃。供参考,Tomcat has four.
  • 如果您想获得动态创建的类的编译时安全性,那将是不可能的-默认情况下,ByteBuddy生成的类名与您期望的名称不同。
  • 由于没有真正的方法可以完成静态分析,因此在调试和诊断动态生成的代码时会更加头疼。

我会 建议您改用编译时解决方案。运行时解决方案以其灵活性而吸引人,但是Java变得 in 灵活。