2

例如我有:

interface Consumer<F extends FoodType>
interface Vegetarian extends Consumer<Grass>
interface Predator extends Consumer<Meat>

我想要类似的东西:

class Feeder<C extends Consumer<F>>

在类声明中使用F类型参数。Feeder目的是仅传递信息类型参数并从传递的参数中获取其他类型参数:

new Feeder<Vegetarian>().buyFood(bluegrassIsGrassAndCouldNotBeMeat)
4

2 回答 2

1

您可以使用:

  class Feeder<C extends Consumer<? extends FoodType>>

或者简单地说:

  class Feeder<C extends Consumer<?>>

但它们之间是有区别的。据我从你的问题中了解到(不是很清楚)你想要这两个中的一个。

于 2012-08-22T12:16:50.950 回答
1

如果该类要使用两个泛型类型,即使它们是依赖的,它也将需要两个泛型参数。

class Feeder<C extends Consumer<F>, F extends FoodType>{}

如果更灵活一点可能会有用。

class Feeder<C extends Consumer<? super F>, F extends FoodType>{}

(Josh Bloch 使用首字母缩写词 PECS:生产者的extend;消费者的super。)

于 2012-08-22T12:21:17.023 回答