栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java枚举和泛型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java枚举和泛型

我会稍作猜测,这是由于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的用例也是如此)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号