[英]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 是您不应该做的事情,因为它的类型安全性较低,并且只允许向后兼容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.