[英]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) {
//
}
如果你希望方法返回它所采用的相同類型(即ArrayList
為ArrayList
, LinkedList
為LinkedList
),那么很遺憾地告訴你, 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.