Java限制了对字段的通用约束

Mic*_*rry 5 java generics

有几次我觉得有必要做以下事情:

private <T extends Type> Map<GenericClass1<T>,GenericClass2<T>> map;
Run Code Online (Sandbox Code Playgroud)

......或者那种效果.基本上,在map的两个参数中使用相同的边界.(这不是一个实际的例子,只是显示了这个想法.)

我知道(不幸的是)这是不可能的,它只适用于类定义和方法签名.然而,我的问题是为什么不在字段上提供?这纯粹是一种设计选择,还是有一些我缺失的技术原因?我已经有了一个想法,并且无法从技术角度看出为什么这是不可能的,因为我可以看到编译器正确地处理它的所有内容,并且在运行时不需要通用信息.

mnc*_*ncl 2

<T> 表示 ONE 类,而不是 A 类。当你的对象被实例化时,T 就绑定到这个 ONE 类。

您试图将两个具有不同接口的对象(使用不同,因为它们接受/返回不同类型)放入同一个容器中。这是一个错误,因为当您将它们从容器(地图)中取出时,您不知道放入的是什么。

希望这是您正在寻找的答案。

编辑:也就是说,您可以拥有一个包含基于该类的成员的容器,以自动为每种类型的 T 创建一个新映射。然后您需要知道 T 是什么才能访问它。一般来说,如果您不再需要类型信息,请将其丢弃。如果你这样做,那么出于所有实际原因,将它与其他类型的东西放在同一个容器中无论如何都会将其扔掉。