在一个抽象类中,我有以下定义:

  protected abstract A expectedA(B b);

  protected Function<A, B> createExpectedA(Long foo) {
    return a -> { ... return b}}


然后我想用createExpectedA的return函数覆盖抽象函数,如下所示:

  @Override
  protected Function<A, B> expectedA = createExpectedA(fee);


但是,这给了我以下错误:


  该位置不允许使用注释@Override


如何在Java8中做我想做的事?

最佳答案

注释Override只能用于方法,而不能用于字段,这就是为什么会出现此错误的原因。提醒一下,这是Javadoc:


  指示方法声明旨在覆盖方法
  超类型中的声明。如果方法带有此注释
  注释类型编译器需要生成错误消息
  除非至少满足以下条件之一:
  
  
  该方法的确覆盖或实现了在超类型中声明的方法。
  该方法的签名与Object中声明的所有公共方法的签名等效。
  


您想要做的似乎是这样的:

@Override
protected A expectedA(B b) {
    return createExpectedA(fee).apply(b);
}

关于java - 使用高阶函数覆盖Java中的抽象方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38896645/

10-13 08:06
查看更多