gpt4 book ai didi

java - 参数化类型的快捷方式?

转载 作者:行者123 更新时间:2023-12-02 10:20:32 28 4
gpt4 key购买 nike

我正在处理需要生成大量 List<Map<String,Object>> 的代码并且必须输入例如bob = new List<Map<String,Object>>一直以来。

我尝试创建一个空类

class ListMap extends List<Map<String,Object>> {}

然后是采用 List<Map<String,Object>> 的方法不接受new ListMap()作为它们的类型,我从返回 List<Map<String,Object>> 的方法中收到错误如果我将它们分配给 ListMap 。基本上我希望 Java 将我的 ListMap 视为与 List> 相同...因为理论上至少是通过继承。

最佳答案

因为您有方法返回 List<Map<String,Object>> ,但想将其分配给 ListMap 类型的变量,以及List<Map<String,Object>>可以实现为 ArrayList<Map<String,Object>> ,您不能使其直接与 ListMap 赋值兼容。 .

因此,您需要使用委托(delegate)代理来包装返回的对象。首先,为 List 创建一个通用委托(delegate)类。它们很容易创建,例如Eclipse 可以通过从“Generate Delegate Methods... ”下拉菜单中选择“Source ”来为您创建所有委托(delegate)方法。

它应该看起来像这样:

public class DelegatingList<E> implements List<E> {
private final List<E> list;
protected DelegatingList(List<E> list) {
this.list = list;
}
@Override
public int size() {
return this.list.size();
}
@Override
public boolean isEmpty() {
return this.list.isEmpty();
}
@Override
public boolean contains(Object o) {
return this.list.contains(o);
}
// many other delegating methods from List
}

现在定义您的ListMap接口(interface):

public interface ListMap extends List<Map<String,Object>> {
public static ListMap newArrayList() {
return wrap(new ArrayList<>());
}
public static ListMap wrap(List<Map<String,Object>> list) {
if (list instanceof ListMap)
return (ListMap) list;
class Wrapper extends DelegatingList<Map<String,Object>> implements ListMap {
protected Wrapper() {
super(list);
}
}
return new Wrapper();
}
}

现在使用起来很简单:

ListMap myListMap = ListMap.newArrayList();
methodAcceptingListOfMapOfStringToObject(myListMap);
ListMap x = ListMap.wrap(methodReturningListOfMapOfStringToObject());

关于java - 参数化类型的快捷方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370888/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com