为什么`test2()`方法编译成功,但是`test1()`没有编译?

时间:2018-12-04 14:11:55

标签: java generics

请考虑以下Test Java类。

为什么test2()方法不能成功编译,但是test1()不能编译?

import java.util.Arrays;
import java.util.List;

public class Test {

    public <N extends Number> List<N> test1(){
        //compile error: Type mismatch: cannot convert from List<Integer> to List<N>
        return Arrays.asList(1,2,3);
    }

    public List<? extends Number> test2(){
        //no compile error
        return Arrays.asList(1,2,3);
    }

}

1 个答案:

答案 0 :(得分:2)

如果您编写调用这些方法的代码,它将变得更加清晰。

例如:

OR

如您所见, select distinct a.name,a.id,a.icon,a.Agrippa from em a inner join pref b on a.id = b.id where a.name in ('Irish','jags') and a.icon in ('app','net','res') and a.Agrippa= 'mac' and b.res = 'new' and a.icon in ('site') 的输出可以分配给public static void main (String args) { Test obj = new Test(); List<Double> list1 = obj.test1 (); List<? extends Number> list2 = obj.test2 (); } ,这意味着它不能返回test1()

另一方面,List<Double>的输出只能分配给List<Integer>test2()List<? extends Number>,而List<? extends Object>可以分配被分配给所有三个。