Невозможно скомпилировать класс, реализующий интерфейс без параметра типа

У меня есть следующий тестовый код:

public interface Container<I> {
    public void addClass(Class<?> clazz);
}

public class MyContainer implements Container {
    public void addClass(Class<?> clazz) {}
}

, и я получаю следующую ошибку при попытке скомпилировать эти два класса:

MyContainer.java:1: MyContainer is не абстрактный и не переопределяет абстрактный метод addClass (java.lang.Class) в контейнере

. Если я добавлю тип в интерфейс контейнера в MyContainer (например, ), я не буду получить ошибку.

Проблема в том, что я ввожу параметр типа в контейнер, который является частью общедоступного API, поэтому для совместимости я не могу, чтобы все реализующие классы не могли компилироваться.

У кого-нибудь есть какие-либо идеи? Это проблема стирания типа? Есть ли обходной путь?

6
задан Qantas 94 Heavy 1 May 2014 в 09:13
поделиться