Почему метод `test2 ()` успешно компилируется, а `test1 ()` нет? - PullRequest
0 голосов
/ 04 декабря 2018

Пожалуйста, рассмотрите класс Java Test ниже.

Почему метод 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 голосов
/ 04 декабря 2018

Это станет более понятным, если вы напишите код, который вызывает эти методы.

Например:

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> или * 1014.*, и List<Integer> можно назначить всем трем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...