2 回答

TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
在這種情況下,最好的做法是為您ListMap的往返添加轉(zhuǎn)換方法List<Map<String, Object>>......知道如果您可以保留對它的引用并通過委托或?qū)⒏姆珠_,在這種情況下,您可以共同擴展.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貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊
由于您有方法返回List<Map<String,Object>>,但想將其分配給類型的變量ListMap,并且List<Map<String,Object>>可能實現(xiàn)為 a ArrayList<Map<String,Object>>,因此您不能使其直接與 a 分配兼容ListMap。
因此,您需要使用委托代理包裝返回的對象。首先,為List. 它們很容易創(chuàng)建,例如 Eclipse 可以通過Generate Delegate Methods...從“ Source”下拉菜單中選擇“ ”為您創(chuàng)建所有委托方法。
它應(yīng)該如下所示:
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
}
現(xiàn)在定義你的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();
}
}
現(xiàn)在使用起來很簡單:
ListMap myListMap = ListMap.newArrayList();
methodAcceptingListOfMapOfStringToObject(myListMap);
ListMap x = ListMap.wrap(methodReturningListOfMapOfStringToObject());
添加回答
舉報