下面我有一个通用的OuterClass,一个使用OuterClass泛型和非泛型InnerInterface的InnerClass.
public class OuterClass<E> {
public class InnerClass {
public E someMethod() {
return null;
}
}
public interface InnerInterface{
public void onEvent(OuterClass.InnerClass innerClass);
}
}
Run Code Online (Sandbox Code Playgroud)
在下面的主要方法中,我使用两个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();
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
我想表达myListener用于o1,并且应该使用E = Integer,而不重复它(不重复,我在声明o1时已经说过).那可能吗?
非常感谢!Faton.
Lau*_*eyn 15
内部接口或枚举是隐含的静态,静态成员不使用外部类的类型参数进行参数化.所以InnerInterface
应该是这样的:
public interface InnerInterface<E> {
void onEvent(OuterClass<E>.InnerClass innerClass);
}
Run Code Online (Sandbox Code Playgroud)
注意E
的参数InnerInterface
是不一样E
的参数OuterClass
.