【发布时间】:2018-03-26 12:04:26
【问题描述】:
下面是代码
public abstract class A {
public abstract <E> void foo(E e);
}
子类:
public class B extends A {
@Override
public <OtherClass> void foo(OtherClass oc) {
oc.someOtherClassMethod(); //here compiler cannot see method
}
}
与 main 类
public class C {
public static void main(String[] args) {
OtherClass oc = new OtherClass();
A a = new B();
a.foo(oc);
}
}
我得到的错误:
error: cannot find symbol
...
symbol: method someOtherClassMethod()
location: variable oc of type OtherClass
where OtherClass is a type-variable:
OtherClass extends Object declared in method <OtherClass>write(OtherClass )
1 error
为什么我不能使用 someOtherClassMethod()?没有泛型一切正常,但我希望能够扩展我覆盖 foo() 方法的其他类
解决方案:
public abstract class A <E> {
public abstract void foo(E e);
}
子类:
public class B extends A<OtherClass> {
@Override
public void foo(OtherClass oc) {
oc.someOtherClassMethod();
}
}
但是,现在我需要在 main 函数中使用:
A<OtherClass> a = new B();
【问题讨论】:
-
因为
otherClass是一个通用参数,所以可以是任何参数。 -
显示 otherClass.java 文件是否有方法 someOtherClassMethod
-
请注意,Java 类型和类型参数通常以大写字母开头。即
OtherClass,而不是otherClass。 -
是的,它有一些OtherClassMethod,没有泛型一切正常。 @Oliver 那么可以使用泛型参数吗?
-
你想通过在这里使用泛型来解决什么问题?如果不理解这一点,就很难提出有意义的解决方案。