Pull to refresh

Необычное поведение generics

Reading time1 min
Views5.8K
Случайно обнаружил нетипичную проблему с параметризацией и наследованием в Java.
Сразу оговорюсь, что все это представляет только академический интерес. В реальной жизни так криво писать никто не будет. Но формально такого быть не должно:
Interface.java
public interface Interface {
    void test(Class<Object> clazz);
}

BaseClass.java
public abstract class BaseClass<T> implements Interface {
    abstract public void test(Class<Object> clazz);
}

MyClass.java
public class MyClass extends BaseClass {
    public void test(Class<Object> clazz) {
    }
}
Компилятор выдает ошибку:
MyClass is not abstract and does not override abstract method test(java.lang.Class)
Tags:
Hubs:
+19
Comments39

Articles

Change theme settings