【问题标题】:Using method on object in overriden abstract generic function in Java在Java中重写的抽象泛型函数中对对象使用方法
【发布时间】: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 那么可以使用泛型参数吗?
  • 你想通过在这里使用泛型来解决什么问题?如果不理解这一点,就很难提出有意义的解决方案。

标签: java oop generics


【解决方案1】:

试试

public abstract class A<E> {
  public abstract void foo(E e);
}

public class B extends A<OtherClass>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2013-12-30
    • 1970-01-01
    • 2012-12-10
    • 2021-03-13
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多