簡體   English   中英

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

[英]Generic method that takes List in non generic class

我想做這樣的事情

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);

所以任何建議我如何使這項工作。

以下應該可以正常工作。

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

T在這里沒有用處,因此可以消除。

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

如果你希望方法返回它所采用的相同類型(即ArrayListArrayListLinkedListLinkedList ),那么很遺憾地告訴你, Java的類型系統不具備這種能力

偉大的2秒后,我找到了神奇的組合。 無論如何,對於偶然發現這一點的所有其他人來說,這對我有用

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

你為什么要使用模板? 用這個是不夠的:

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

這對我有用:

  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));
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM