Как переопределить метод, имеющий параметр Object с универсальным параметром? - PullRequest
2 голосов
/ 30 ноября 2011

Я хочу переопределить метод с параметром типа Object:

public void setValue(Object value) {
    // ...
}

и сделать этот параметр универсальным типом T:

@Override
public void setValue(T value) {
    super.setValue(value);
}

Как я могу сделать это в Java?

В Eclipse я получаю следующие ошибки:

Multiple markers at this line
- The type parameter T is hiding the type T
- Name clash: The method setValue(T) of type TextField<T> has the 
 same erasure as setValue(Object) of type JFormattedTextField but does not 
 override it
- The method setValue(T) of type TextField<T> must override or 
 implement a supertype method

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

Нельзя сделать так, чтобы переопределяющий метод принимал более узкий тип, чем метод, который он переопределял.

Если бы вы могли, было бы возможно следующее:

class A {
    public setValue(Object o) {…}
}

class B<T> extends A {
    @Override
    public setValue(T o) {…};
}

A a = new B<String>(); // this is valid
a.setValue(new Integer(123)); // this line would compile, but make no sense at runtime 
0 голосов
/ 30 ноября 2011

Использование:

<T extends Object> public void setValue(T o) {…};

Тогда не будет проблем с a.setValue(new Integer(123));. Просто определите как A a = new B();. Вы можете сделать это более узким, заменив Object на нужный класс.

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