繁体   English   中英

如何在 Java 中给出任何 object 的列表作为参数?

[英]How to give a List of any object as parameter in Java?

我有几个类在做同样的事情:迭代 object 中的列表,并将每个项目添加到私有字段中。 我有两个对象:MyCustomObject,它有几个字段,以及 ResultOfQuery,它有一个名为 data 的字段,它是List<Map<String, Object>>

例如

private List<MyCustomObject> myCustomObjectList = new LinkedList();

public void setMyCustomObject (ResultOfQuery resultOfQuery){
    ObjectMapper objectMapper = new ObjectMapper();
    if(resultOfQuery!= null) {
        for (Map<String, Object> map : resultOfQuery.getData()) {
            myCustomObjectList.add(objectMapper.convertValue(map, 
                    MyCustomObject.class));
        }
    }

问题是我有其他类执行完全相同的方法,但使用另一个 object 而不是 MyCustomObject。

所以我认为一个好主意是所有这些类都应该扩展一个包含此方法的 class,并且作为参数,它应该首先采用 resultOfQuery,然后是任何对象的列表,然后是 Class。 听起来不错,还是有更好的方法来实现这一目标?

另外,如何列出任何 object? 我尝试了List<?> ,但这向我显示了以下错误:

列表添加行出错

您可以使用 generics 和 inheritance 实现类型安全。 如果您声明具有以下常见内容的基本 class :

public class BaseClass<T> {
    
    private List<T> tList = new LinkedList<>();
    private final Class<T> classT;
    
    public BaseClass(Class<T> classT) {
        this.classT = classT;
    }
    
    public void setObject (ResultOfQuery resultOfQuery){
        ObjectMapper objectMapper = new ObjectMapper();
        if(resultOfQuery!= null) {
            for (Map<String, Object> map : resultOfQuery.getData()) {
                tList.add(objectMapper.convertValue(map, classT));
            }
        }
    } 
}

然后很容易为每种不同的类型扩展它,例如:

public class MyCustomObjectExtendedClass extends BaseClass<MyCustomObject> {
    public MyCustomObjectExtendedClass() {
        super(MyCustomObject.class);
    }
}

我重命名了东西,因为它与MyCustomObject分离。

您可以使用private List myCustomObjectList = new LinkedList();

使用原始类型(即没有类型参数,如 List list = new ArrayList(3))实例化 class 是您不应该做的事情,因为它的类型安全性较低,并且只允许向后兼容。

链接: Java Generics 列表和 ArrayList 有和没有参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM