【发布时间】:2014-10-05 13:35:32
【问题描述】:
我有 2 个操作泛型的抽象类和 1 个使用泛型的工厂。父级独立于trips 对象和分解代码。儿子只是基于旅行。
//parent
public abstract class AbstractPurchaseExtractor<//
BINDING_CLASS extends ForPnrHandling, //
PURCHASE extends AbstractServicePurchase<?, PRICING, RECEIPT, ITEM, COUPON>, //
PRICING extends PricingDefault, //
RECEIPT extends ReceiptDefault, //
ITEM extends AbstractServiceItem<PURCHASE, COUPON>, //
COUPON extends CouponDefault> //
implements IPurchaseExtractor<BINDING_CLASS, PURCHASE, PRICING, RECEIPT, ITEM, COUPON>
...
//son
public abstract class AbstractTripBasedPurchaseExtractor<//
BINDING_CLASS extends ForPnrHandling, //
TRIP_PURCHASE extends AbstractTripBasedPurchase<?, PRICING, RECEIPT, TRIP_BASED_ITEM, TRIP_BASED_COUPON> , //
PRICING extends PricingDefault, //
RECEIPT extends ReceiptDefault, //
TRIP_BASED_ITEM extends AbstractTripBasedItem<TRIP_PURCHASE, TRIP_BASED_COUPON, ?>, //
TRIP_BASED_COUPON extends TripBasedCouponDefault> //
extends AbstractPurchaseExtractor<BINDING_CLASS, TRIP_PURCHASE, PRICING, RECEIPT, TRIP_BASED_ITEM, TRIP_BASED_COUPON> //
{
@Autowired
private AbstractTripBasedPurchaseFactory<TRIP_PURCHASE, PRICING, RECEIPT, TRIP_BASED_ITEM, TRIP_BASED_COUPON> abstractTripBasedPurchaseFactory;
...
//factory
public abstract class AbstractTripBasedPurchaseFactory<PURCHASE extends AbstractTripBasedPurchase<?, PRICING, RECEIPT, ITEM, COUPON>,
PRICING extends PricingDefault,
RECEIPT extends ReceiptDefault,
ITEM extends AbstractTripBasedItem<? extends AbstractTripBasedPurchase<?, PRICING, RECEIPT, ITEM, COUPON>, COUPON, ?>,
COUPON extends TripBasedCouponDefault>
extends AbstractPurchaseFactory<PURCHASE, PRICING, RECEIPT, ITEM>
{
我在 Eclipse 上遇到了 AbstractTripBasedPurchaseExtractor 第 9 行的错误: 有界不匹配:类型 TRIP_PURCHASE 不是有界参数的有效替代品
<PURCHASE extends AbstractServicePurchase<?,PRICING, RECEIPT, ITEM,COUPON>>
类型
AbstractPurchaseExtractor<BINDING_CLASS,PURCHASE,PRICING, RECEIPT, ITEM,COUPON>
这里:扩展 AbstractPurchaseExtractor '
在子类上使用扩展,我需要为 TRIP_PURCHASE 使用扩展 AbstractServicePurchase 的东西。实际上 AbstractTripBasedPurchase 扩展了 AbstractServicePurchase。那么为什么会报错呢?
如果我按照 Eclipse 的预期将 AbstractTripBasedPurchase 替换为 AbstractServicePurchase,它当然可以编译,但我不能在子类上使用我的行程工厂。
【问题讨论】:
-
泛型类型太多了,我现在无法理解,但乍一看,其中有一个通配符 (
?) 可能不是很好。如果用类型占位符替换它会有帮助吗? -
不,我不需要在这里替换通配符(?)没有问题。问题是extends 期望我声明一个AbstractServicePurchase 类,但我传递了一个名为AbstractTripBasedPurchase 的类的儿子。奇怪的是不接受它,就像继承不起作用
-
您能否将其简化为仍然存在问题的最小示例?
-
这听起来很奇怪,因为它是用 Maven 编译的,但是我的 java 文件在 Eclipse Kepler 上是红色的错误... Eclipse bug ???
-
母牛的圣母!
标签: java generics inheritance abstract