我想介绍XSD生成的具体类的接口。首先,我需要展示工作版本:
public interface IBooking<T extends IChargeList> {
T getChargesList();
void setChargesList(T value);
}
public aspect IntertypeDeclarationAspect {
declare parents:Booking implements IBooking<BookingChargeList>;
declare parents:BookingChargeList implements IChargeList;
}
该版本有效,但如果我将泛型移到方法声明中,它就不会:
public interface IBooking {
<T extends IChargeList> T getChargesList();
<T extends IChargeList> void setChargesList(T value);
}
public aspect IntertypeDeclarationAspect {
declare parents:Booking implements IBooking;
declare parents:BookingChargeList implements IChargeList;
}
错误消息是:
Booking.java:144 [error] The type Booking must implement the inherited abstract method IBooking.setChargesList(T)
有趣的是它没有为getChargesList()
方法提供错误。
可能是什么原因?
Booking类的相关部分如下:
public BookingChargeList getChargesList() {
return chargesList;
}
public void setChargesList(BookingChargeList value) {
this.chargesList = value;
}
答案 0 :(得分:2)
首先处理最后一部分,返回类型不是方法签名的一部分,因此getChargesList()
没有参数,方面正确实现了这一点。它的返回类型不会在第二个例子中受到约束,但这并不重要。
至于为什么setChargesList(T)
没有实施,那是因为&#39; T&#39;未定义。当接口方法签名使用方法级泛型类型定义时,该定义也必须存在于实现中。所以这是有效的:
@Override
public <T extends IChargeList> void setChargesList(final T value) {
}
但这不是:
@Override
public void setChargesList(final T value) {
}
它是AspectJ正在生成的第二个例子
我担心我的AspectJ不足以告诉你如何解决你的问题,但我希望这可以帮助你弄清楚发生了什么。