【发布时间】:2016-12-13 14:27:41
【问题描述】:
即使这不是一个好习惯,我也想知道为什么要知道。
下面的代码无法编译,我真的不明白为什么。
假设我对小丑、女王和国王有一个抽象的定义:
abstract class JokerA {
//JokerA does things
}
abstract class QueenA<J extends JokerA> {
//QueenA makes use of J
class Princess {
void receiveGift(Gift gift) {
/* ... */
}
}
}
abstract class KingA<Q extends QueenA<?>> {
KingA(Q.Princess princess) {
Gift giftForPrincess = new Gift();
princess.receiveGift(giftForPrincess);
}
}
这很好用。 但是,我也想定义一个更专业但仍然抽象的小丑、女王和国王
abstract class JokerB extends JokerA {
//JokerB does some things differently
}
abstract class QueenB<J extends JokerB> extends QueenA<J> {
//QueenB makes use of J sometimes differently, because she knows how JokerBs behave
}
abstract class KingB<Q extends QueenB<?>> extends KingA<Q> {
KingB(Q.Princess princess) {
super(princess); //error
}
}
错误是:
KingA(QueenA<capture<?>>.Princess) in KingA cannot be applied to (Q.Princess)
但是,我看不出公主级会有什么不同。
谁能赐教?
【问题讨论】:
标签: java generics inner-classes