Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Generic в суперклассе и интерфейсе


Автор: lazycat 12.6.2015, 14:10
Доброго времени суток всем!

Есть у меня код (даю в предельно упрощенном виде)

Код

public interface MyMap<K, V>  {
...
public V put(K key, V value);
...
}

Код

public class MyMapImpl<K, V>
        extends HashMap<MyK, V>
        implements MyMap<K, V> {
...
        @Override
    public V put(K key, V value) {
          ...
       }
...
}


Код

public class MyK { ... }


Как видите, в суперклассе HashMap и в интерфейсе есть мтод put c разными generic типами.
Так вот в этой точке компилятор ругается:
Name clash: The method put(K, V) of type MyMapImpl<K,V> has the same erasure as put(K, V) of type HashMap<K,V> but does not override it    

Сталкивался ли кто-нибудь с чем-нибудь подобным?

Заранее благодарен за любые отклики.

замечание: разные generic типы в суперклассе и интерфейсе - это принципиальный момент, изменить невозможно!


Автор: CPlusPlusFAN 14.6.2015, 21:26
Да, сталкивался. А что нужно?

Автор: LSD 15.6.2015, 11:42
В рантайме от <K, V> ничего не остается только Object соответвенно оба метода будут заменены на Object put(Object, Object) и будут иметь одинаковую сигнатуру. О чем и говорит компилятор.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)