我有Genric类,它用于设置任何自定义数据类型
public class NotificationData<E> {
private E element;
public E getElement() {
return element;
}
显示编译时错误的通知任务界面 -
T无法解析为某种类型。我在方法前添加了“”它确实解决了错误,但是为使用此接口的其他类创建了问题。
public interface NotificationTask {
void execute(NotificationData<T> taskData);
// --other methods
}
下面的类实现了它但显示错误
名称冲突:类型的方法execute(NotificationData) AbstractEmailNotificationTask具有相同的擦除功能 notificationTask类型的execute(NotificationData)但不是 覆盖它
和prepareEmailTemplate显示以下错误 -
方法prepareEmailTemplate(NotificationData)来自该类型 AbstractEmailNotificationTask是指缺少的类型T
public abstract class AbstractEmailNotificationTask implements NotificationTask{
private static final Log logger = LogFactory.getLog(AbstractEmailNotificationTask.class);
private boolean flag;
public <T> void execute(NotificationData<?> taskData) {
try {
String content=prepareEmailTemplate(taskData);
setTaskExceuted(true);
} catch (Exception e) {
logger.debug (e.getMessage (),e);
setTaskExceuted(false);
}
}
abstract protected String prepareEmailTemplate(NotificationData<T> taskData) throws TaskExecutionException;
}
public class AddressUpdateEmailNotification extends AbstractEmailNotificationTask {
public AddressUpdateEmailNotification() {
}
@Override
protected String prepareEmailTemplate(NotificationData<CustomerAddress> taskData) {
CustomerAddress customerAddress= taskData.getElement();
return customerAddress.getCity() +":"+customerAddress.getState().getStateName();
}
}
以上是将实现prepareEmail模板的实际类。在这个类中,我传递CustomerAddress,但在其他扩展AbstractEmailNotificationTask的类中,我必须传递其他对象。我想使用泛型但面临这些问题。
答案 0 :(得分:0)
您的界面不是通用的,因此其中的方法无法使用泛型类型识别(并且无法解析为一个)。简单地说它是通用的:
public interface NotificationTask<T> {
void execute(NotificationData<T> taskData);
// --other methods
}