Как я могу принять супертип универсального параметра для одного объекта? - PullRequest
0 голосов
/ 16 ноября 2009

Можно ли принимать только супертипы универсального типа класса?

Я ищу что-то вроде:

class <T extends Object> MyClass {

    public <TS super T> void myMethod(TS someObjectSuperToTheClass) {
         //do stuff
    }

}

Мне это больше не нужно (и, вероятно, это не так уж и полезно для начала), но мне интересно, возможно ли это вообще, а если нет, то почему.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2009

Подумайте, что бы это значило в этом случае.

Вы хотите утверждать, что TS является либо T, либо любым из его суперклассов. Но поскольку TS является просто ссылкой, фактический параметр someObjectSuperToTheClass может быть TS или подклассом.

Соединяя обе половинки, получается, что ваш код полностью эквивалентен

public void myMethod(Object someObjectSuperToTheClass) { //do stuff }

так как вместе, у вас есть то, что TS может идти так высоко, как ему нужно, вверх по иерархии классов, а параметр может идти вниз, насколько ему нужно.

Чем вы были пытались ограничить параметр этим синтаксисом?

3 голосов
/ 16 ноября 2009

Нет, вы не можете! Только подстановочные знаки могут иметь ограничение super.

...