2 回答
TA贡献1871条经验 获得超13个赞
在这种情况下,最好的做法是为您ListMap的往返添加转换方法List<Map<String, Object>>......知道如果您可以保留对它的引用并通过委托或将更改分开,在这种情况下,您可以共同扩展.ListMapListListMapListMapListjava.util.*
class ListMap extends AbstractList<Map<String, Object>> {
public ListMap(final Map<String, Object> list) { super(list); }
// or
public static ListMap fromList(final List<Map<String, Object>> list) {
if (list instanceof ListMap) {
return (ListMap) list;
} else {
return new ListMap(list);
}
}
}
如果提供的列表实际上是一个ListMap.
TA贡献1803条经验 获得超3个赞
由于您有方法返回List<Map<String,Object>>,但想将其分配给类型的变量ListMap,并且List<Map<String,Object>>可能实现为 a ArrayList<Map<String,Object>>,因此您不能使其直接与 a 分配兼容ListMap。
因此,您需要使用委托代理包装返回的对象。首先,为List. 它们很容易创建,例如 Eclipse 可以通过Generate Delegate Methods...从“ Source”下拉菜单中选择“ ”为您创建所有委托方法。
它应该如下所示:
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界面:
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());
添加回答
举报