将方法限制为RandomAccess列表

时间:2013-09-04 14:05:06

标签: java list random-access

我有一个对List进行操作的方法,删除了某些重复项。该算法仅对实现RandomAccess的列表有效。为了防止滥用和令人失望的性能,我想知道如何强制执行RandomAccess限制。遗憾的是,RandomAccess接口并未扩展List,所以我需要同时将变量设为两种类型。

我可以声明接受ArrayList而不是List的方法,但其他列表类型也可以实现RandomAccess(例如,Collections.synchronizedList和{返回的列表{1}}),我不想阻止它们。

我尝试了泛型,但无法构建一个有效的语法:

Collections.checkedList

我能做到:

public <T> void process(<List<T> extends RandomAccess> list) {
    ...
}

但是这个限制只能在运行时强制实施,而不是那么强大。

帮助?

1 个答案:

答案 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) {

    }
}