无法将泛型方法的结果传递给另一个方法? [英] Can't pass the result of a generic method to another method?
问题描述
我有一个简单的泛型方法,创建一个n元素列表并返回它:
import java.util。* ;
class A {
public static< T>列表与LT; T> init(int n){
List< T> l = new ArrayList< T>();
while(n - > 0)l.add(null);
return l;
}
public static void main(String [] args){
List< String> x = init(5);
f(x);
}
public static void f(List< String> l){
System.out.println(l:+ l);
它符合预期:
$ javac A.java&& java a
l:[null,null,null,null,null]
但如果我消除额外的变量:
import java.util。*;
class A {
public static< T>列表与LT; T> init(int n){
List< T> l = new ArrayList< T>();
while(n - > 0)l.add(null);
return l;
public static void main(String [] args){
f(init(5));
}
public static void f(List< String> l){
System.out.println(l:+ l);
$ / code>
不再编译
$ javac A.java&& (A)中的aa b $ b A.java:9:f(java.util.List< java.lang.String>)不能应用于(java.util.List< java.lang.Object>)
F(INIT(5));
^
1错误
为什么?
但是这样做:
import java.util。*;
class A {
public static< T>列表与LT; T> init(int n){
List< T> l = new ArrayList< T>();
while(n - > 0)l.add(null);
return l;
}
public static< T> T id(T t){
return t;
}
public static void main(String [] args){
List< String> x = init(5);
f(id(x));
}
public static void f(List< String> l){
System.out.println(l:+ l);
$ / code $ / pre
为什么?
<解决方案