【发布时间】:2015-11-07 15:10:43
【问题描述】:
在一个没有泛型类型的类中,我想声明一个相当复杂的泛型字段,类似于:
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;
}
问题是java编译器不允许我:)
所以我的问题是如何正确引入 T 和 S 而不向我的类 Client 添加类型。
我的目标是强制 Class 是 Serializable 的子类型,而 Consumer 是您为 Class 选择的类的子类型。
【问题讨论】:
-
你为什么不想扩展你的类声明?
-
因为我的
Map应该能够包含不同的 T 和 S 值,而不仅仅是Client声明中定义的值。 -
您的地图成员在哪里初始化?在构造函数中?在某些 setter 方法中?
-
我不太了解您的要求 - 您在创建对象时设置通用字段类型是 Java 概念,您想实现什么?
-
我通过 Socket 接收 Serializables 并希望像这样很好地处理它们:
classToConsumer.get(serial.getClass()).get(i).accept(serial);