如何动态创建并实例化POJO类?

时间:2016-03-15 11:49:03

标签: java pojo

我项目的某些规范要求我根据excel表或JSON提供的信息创建POJO类;然后用手头的相关信息创建该类的对象,稍后将在代码中使用。

从excel表和JSON中提取相关数据不是问题。由于answer,我甚至能够动态创建POJO类。但我不确定是否可以创建此类的对象。正如上面回答中提到的this guy那样 -

  

但问题是:你无法对这些方法进行编码,   因为它们在编译时不存在,所以我不知道这有什么用处   你会做的吗。

是否可以实例化上述答案中创建的类?如果是这样,怎么样?如果没有,这个问题的其他替代方案是什么?或者我应该改变我对此规范的方法并考虑其他选择吗?

如果我没有遵守StackOverflow的规范或错过了我应该提及的细节,请回答或评论。

2 个答案:

答案 0 :(得分:1)

您可以使用reflection to instantiate the generated classses并访问提供的方法。

答案 1 :(得分:1)

可能在你的情况下,我会选择下面这样的东西。这不能作为评论发布。所以发帖在这里。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GenericDTO {

    private Map<String, List<Object>> resultSetMap = new HashMap<String, List<Object>>() ;

    public void addAttribute(String attributeName, Object attributeValue) {
        if(resultSetMap.containsKey(attributeName)) {
            resultSetMap.get(attributeName).add(attributeValue);
        } else {
            List<Object> list = new ArrayList<Object>();
            list.add(attributeValue);
            resultSetMap.put(attributeName, list);
        }
    }

    public Object getAttributeValue(String key) {
        return (resultSetMap.get(key) == null) ? null : resultSetMap.get(key).get(0); 
    }

    public List<Object> getAttributeValues(String key) {
        return resultSetMap.get(key); 
    }

}

您可以像以下一样使用它:

GenericDTO dto = new GenericDTO();
dto.addAttribute("aa", 1);
dto.addAttribute("aa", "aa");
dto.addAttribute("bb", 5);

System.out.println(dto.getAttributeValue("bb"));
System.out.println(dto.getAttributeValues("aa"));