Boa*_*ann 3 java list random-access
我有一种对 a 进行操作的方法List,删除某些重复项。该算法仅对实现RandomAccess 的列表有效。为了防止误用和令人失望的性能,我想知道如何强制执行该RandomAccess限制。不幸的是,该RandomAccess接口无法扩展List,所以我需要让变量同时成为两种类型。
我可以声明该方法为 AcceptArrayList而不是List,但其他列表类型RandomAccess也可以实现(例如,Collections.synchronizedListand返回的列表Collections.checkedList),并且我不想阻止这些。
我尝试了泛型,但无法构建有效的语法:
public <T> void process(<List<T> extends RandomAccess> list) {
...
}
Run Code Online (Sandbox Code Playgroud)
我可以做:
if (!(list instanceof RandomAccess))
throw new UnsupportedOperationException("RandomAccess list required");
Run Code Online (Sandbox Code Playgroud)
但这种限制仅在运行时强制执行,其稳健性较差。
帮助?
您需要使用多个边界,由与号 ( &) 表示:
public <T,L extends List<T> & RandomAccess> void process(L list)
Run Code Online (Sandbox Code Playgroud)
将其放入(不可编译,除非删除第二个调用)类中:
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) {
}
}
Run Code Online (Sandbox Code Playgroud)