我有一个对List
进行操作的方法,删除了某些重复项。该算法仅对实现RandomAccess的列表有效。为了防止滥用和令人失望的性能,我想知道如何强制执行RandomAccess
限制。遗憾的是,RandomAccess
接口并未扩展List
,所以我需要同时将变量设为两种类型。
我可以声明接受ArrayList
而不是List
的方法,但其他列表类型也可以实现RandomAccess
(例如,Collections.synchronizedList
和{返回的列表{1}}),我不想阻止它们。
我尝试了泛型,但无法构建一个有效的语法:
Collections.checkedList
我能做到:
public <T> void process(<List<T> extends RandomAccess> list) {
...
}
但是这个限制只能在运行时强制实施,而不是那么强大。
帮助?
答案 0 :(得分:4)
您需要使用多个边界,用&符号(&
)表示:
public <T,L extends List<T> & RandomAccess> void process(L list)
将它放入(不可编辑,除非你删除第二个调用)类:
public class Main {
public static void main(String[] argv)
throws Exception
{
Main x = new Main();
x.process(new ArrayList<String>());
x.process(new LinkedList<String>());
}
public <T,L extends List<T> & RandomAccess> void process(L list) {
}
}