Below I have a generic OuterClass, an InnerClass that use OuterClass generics and не общий InnerInterface.
public class OuterClass<E> {
public class InnerClass {
public E someMethod() {
return null;
}
}
public interface InnerInterface{
public void onEvent(OuterClass.InnerClass innerClass);
}
}
В основном методе ниже я использую два экземпляра OuterClass: o1 параметризовано с помощью, а o2 с помощью. Мой анонимный внутренний класс myListener пытается использовать общий тип внешнего класса (E). Код, представленный ниже, не компилируется (Integer i = innerClass.someMethod () - Несоответствие типов: невозможно преобразовать из Object в Integer).
public class Test {
public static void main(String[] args) {
OuterClass<Integer> o1 = new OuterClass<Integer>();
OuterClass<String> o2 = new OuterClass<String>();
OuterClass.InnerInterface innerInterface = new OuterClass.InnerInterface() {
@Override
public void onEvent(InnerClass innerClass) {
Integer i = innerClass.someMethod();
}
};
}
}
Я хотел бы сказать, что myListener предназначен для o1 и должен использовать E = Integer , не повторяя (не повторяя, я уже говорю это при объявлении o1). Это возможно?
Большое спасибо! Faton.