我想做这样的事情
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
for ArrayList
,LinkedList
for 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));
}
}