我会稍作猜测,这是由于Enum类本身的类型参数(定义为)上的协方差问题引起的
Enum<E extendsEnum<E>>,尽管要研究所有极端情况会花费很多。
除此之外,枚举的主要用例是使用诸如EnumSet和valueOf之类的东西,其中您拥有具有不同泛型参数的事物集合,并从字符串获取值,所有这些都不支持或恶化枚举本身的泛型参数。
。
我知道当我尝试使用Generics时,我总是处在痛苦的世界中,而且我想象语言设计师会偷看这个深渊并决定不去那里,特别是因为这些功能是同时开发的,这意味着枚举方面的不确定性更大。
或者换种说法,
Class<T>在处理本身具有通用参数的类时会遇到所有问题,您将不得不进行大量的转换和原始类型的处理。对于您正在查看的用例类型,语言设计师认为并非真正值得的东西。
编辑:响应评论(和汤姆-downvote吗?),嵌套的通用参数使各种不好的事情发生。
枚举实现Comparable。如果泛型在起作用,那么比较客户机代码中枚举的两个任意元素根本行不通。一旦处理了Generic参数的Generic参数,您将面临各种边界问题和头痛。设计一个处理良好的类很困难。在可比的情况下,我无法找到一种方法来使它能够比较枚举的两个任意成员,而又不返回原始类型并得到编译器警告。您可以…吗?
实际上,上述情况令人尴尬地错了,因为我在问题中使用DataType作为思考此问题的模板,但实际上Enum会有一个子类,因此不太正确。
但是,我坚持我的回答的要旨。汤姆(Tom)提出来了
EnumSet.complementOf,当然,我们仍然会
valueOf产生问题,并且就Enum的设计可以起到的作用而言,我们必须意识到那是20/20事后看来的事情。Enum与泛型同时设计,没有验证所有这种极端情况的好处。特别是考虑到具有通用参数的Enum的用例相当有限。(但同样,EnumSet的用例也是如此)。



