Я знаю, что подобные вопросы задавались (здесь, здесь, здесь), но ни один из ответов не подходит для моего случая.
Рассмотрим следующий набор интерфейсов:
public interface I1<X> {
void method(X arg);
}
public interface I2 {
void method(String arg);
}
public interface I3 extends I1<String>, I2 {
// empty
}
Теперь я хочу вызвать method(String)
для экземпляра I3
, например:
public class C implements I3 {
public void method(String arg) {
// does nothing
}
public static void main(String[] args) {
((I3) new C()).method("arg");
}
}
OpenJDK (Java 7 или 8, не имеет значения) помечает здесь ошибку несовместимости:
generics\C.java:10: error: reference to method is ambiguous
((I3) new C()).method("arg");
^
both method method(String) in I2 and method method(X) in I1 match
where X is a type-variable:
X extends Object declared in interface I1
Поскольку X
инстанцируется в String
в I3
, я не понимаю, откуда берется проблема. Обратите внимание, что Eclipse считает, что это нормально.