Почему дженерик класса влияет на собственный дженерик метода?

Вопрос примером:
static class Foo<T> {
        <R> R get(R value) {
            return value;
        }
    }

    static {
        {
            // Так работает:
            Foo<?> foo = new Foo<>();
            Long a = foo.get(123L);
        }
        {
            // Так работает:
            Foo<String/*любой тип*/> foo = new Foo<>();
            Long a = foo.get(123L);
        }
        {
            // А почему так не работает?
            Foo foo = new Foo();
            Long a = foo.get(123L); // -- incompatible types Long и Object
        }
    }

Почему отсутствие дженерика класса при определении переменной не дает использовать метод, на который этот дженерик не влияет?
  • Вопрос задан
  • 573 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vestail
@Vestail
Software Engineer
Если вы используете сырую ссылку, вы теряете возможность использовать обобщения для любых нестатических челенов класса черех эту ссылку. JLS(4.8)
Combining Raw Types and Generic Methods
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы