在非泛型类中使用List的通用方法

时间:2012-06-23 22:43:20

标签: java list generics methods

我想做这样的事情

private <T extends List<?>> List<?> getFirstFiveElements(T list) {
    //body
}

然而,当我托盘传递参数时,它无法正常工作

List<A> a = new LinkedList<A>;
List<B> b = new LinkedList<B>; 
getFirstFiveElements(a);
getFirstFiveElements(b);

所以任何建议我如何使这项工作。

4 个答案:

答案 0 :(得分:1)

以下应该可以正常工作。

private static <A, T extends List<A>> List<A> getFirstFiveElements(T list) {
   //
}

T在这里没有用处,因此可以消除。

private static <A> List<A> getFirstFiveElements(List<A> list) {
   //
}

如果您希望方法返回所需的相同类型(即ArrayListArrayListLinkedListLinkedList,则很抱歉告诉您,{ {3}}

答案 1 :(得分:1)

2秒后,我找到了神奇的组合。无论如何,对于偶然发现这一点的所有其他人来说,这对我有用了

     private <T> List<T> getStart(List<T> list)

答案 2 :(得分:0)

为什么要使用模板?用这个是不够的:

private List<?> getFirstFiveElements(List<?> list) {
    //body
}

答案 3 :(得分:0)

这对我有用:

  import java.util.*;

  public class Test {

  private static <T extends List<?>> List<?> getFirstFiveElements(T list) {
    List<Object> result = new LinkedList<Object>();
    for (int i = 0; i < 5 && i < list.size(); i++) {
      result.add(list.get(i));
    }
    return result;
  }

  public static void main(String[] args) {
    List<Integer> a = new LinkedList<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    a.add(5);
    a.add(6);
    a.add(7);
    System.out.println(getFirstFiveElements(a));
  }

}