suc*_*bus 11 java generics types field
在没有泛型类型的类中,我想声明一个类似于这些的相当复杂的泛型字段:
public class Client {
private Map<Class<T extends Serializable>, List<Consumer<S extends T>>> classToConsumerTry1;
private <T extends Serializable, S extends T> Map<Class<T>, List<Consumer<S>>> classToConsumerTry2;
}
Run Code Online (Sandbox Code Playgroud)
promblem是java编译器不会让我:)
所以我的问题是如何在不向我的类Client添加类型的情况下正确引入T和S.
我的目标是强制Class成为您选择的类的子类型Serializable和Consumer子类型Class.
您必须在某处引入类型参数,以便您可以在类成员的定义中使用它们。
只能在类级别或方法级别引入类型参数。在您的情况下,它应该在类级别:
public class Client<T extends Serializable, S extends T> {
private Map<Class<T>, List<Consumer<S>>> classToConsumerTry1;
private Map<Class<T>, List<Consumer<S>>> classToConsumerTry2;
}
Run Code Online (Sandbox Code Playgroud)
然而,这意味着对于两个成员 (classToConsumerTry1和classToConsumerTry2),T和S是相同的。如果您希望它们不同,则必须从两个不同的类中获取这两个值,这两个类都使用单独的类型参数进行参数化。
| 归档时间: |
|
| 查看次数: |
15701 次 |
| 最近记录: |