<? extends Type> 是一个有界通配符泛型。以这种方式定义的集合可以是任何类型的子类,或Type。即。
Collection<Type> typeCollection;
//or
Collection<SubType> subtypeCollection;
//where subtype is...
class SubType extends Type
在这种情况下,重要的是 ? 的类型为 Type。
Collection<Type> 必须返回Type 的集合。即。
Collection<Type> collection;
阅读tutorials here. 了解更多信息。您选择哪个取决于您的需求。
这是一个例子。我在定义可渲染项组时使用有界通配符。例如。
public class SpriteGroup<T extends Sprite>
这将是 Sprites 或 Sprite 的任何子类的集合。这很有用,因为我可以像这样定义组:
SpriteGroup<PhysicalSprite> physicalSprites = new SpriteGroup<PhysicalSprite>();
PhysicalSprite physicalSprite = physicalSprites.get(0);
SpriteGroup<ParticleSprite> particleSprite = new SpriteGroup<ParticleSprite>();
ParticleSprite particle = particleSprite.get(0);
然后,任何 get/set 例程都会返回我指定的类型(PhysicalSprite、ParticleSprite),这是可取的。
如果我将其定义为:
SpriteGroup<Sprite> spriteGroup = new SpriteGroup();
//all I can retrieve is a sprite, gotta cast now...
Sprite sprite = spriteGroup.get(0);
我需要强制转换它们以访问特定于每种 Sprite 类型的属性。 SpriteGroup 的任何子类都将受到同样的限制。