我在下面编写了一个代码,其中包含一个通用服务抽象类,该类具有该服务对其所有实现都需要执行的大多数通用功能。所有这些消息都需要进行验证,然后传递给相应的实现类以对对象进行任何处理

但是这里的问题是Java编译器抱怨我下面的代码中的参数 NotificationMessage 类型错误。

child 类

有人可以告诉我为什么以及如何解决此问题吗?

我的AbstractService类:

public abstract class AbstractService<N extends NotificationMessage> implements ServiceInterface {

    @Override
    public boolean execute() {
        NotificationMessage notification = controller.load(); //this call would return object of sub-type of NotificationMessage
        processData(notification); //Compiler complains here that the argument is wrong here

    }

    protected abstract void processData(N notification);
    }
}

具体的服务类别之一:
public class SummaryService extends AbstractService<SummaryNotification> {

    @Override
    protected void processData(SummaryNotification notification) {


    }
}

数据对象:
public class NotificationMessage {
    public String getName() {
        return "";
    }
}




public class SummaryNotification extends NotificationMessage {
     public String getName() {
         return "";
     }

     public String getSummary() {
         return "";
     }
}

最佳答案

您的方法:

protected void processData(SummaryNotification notification) {

接受SummaryNotification,因此您不能使用NotificationMessage实例来调用它。

(想象一下,如果允许这样做,请在processData方法中访问getSummary实例的方法NotificationMessage,然后会发生运行时异常)

所以:
  • 更改您的controller.load以返回SummaryNotification
  • 使您的processData接受NotificationMessage
  • 如果您事先知道您的 Controller 将返回NotificationMessage(不建议这样做),则将SummaryNotification转换为SummaryNotification

  • 09-25 17:45