我在下面编写了一个代码,其中包含一个通用服务抽象类,该类具有该服务对其所有实现都需要执行的大多数通用功能。所有这些消息都需要进行验证,然后传递给相应的实现类以对对象进行任何处理
但是这里的问题是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
或NotificationMessage
(不建议这样做),则将SummaryNotification
转换为SummaryNotification
。