首页 / JAVA / Java EnumMap参数混淆
Java EnumMap参数混淆
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java EnumMap参数混淆,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1378字,纯文字阅读大概需要2分钟。
内容图文
![Java EnumMap参数混淆](/upload/InfoBanner/zyjiaocheng/756/210992a537794392a448bbad5d790c3d.jpg)
我第一次使用EnumMap,并且不明白参数传递实际上在做什么.据我所知,它只是“K.class”,其中K是地图键.这很好用,但我还没有在Java的其他任何地方看到这个,我不清楚它在构造中扮演的角色.
我想这是一个理论问题,因为代码运行:“K.class”参数意味着什么,以及EnumMap需要什么?
解决方法:
请参阅class literals的链接问题.
EnumMap特别需要它,因为它需要知道枚举有多少不同的值.这是因为EnumMap是一个高度优化的枚举映射实现,它只使用一个数组,每个可能的值都有一个插槽(而不是像HashMap那样更大的数组).当你调用get()时,它会检索给定键的索引(即第一个枚举值,第二个等)并查看其内部数组的适当位置.为此,构造函数需要知道分配正确大小的数组的可能值的数量.
给定类对象,它可以调用getEnumConstants()来查找此枚举的现有值的数量.
此外,想象下面的代码:
enum Enum1 { V1, V2; }
enum Enum2 { W1, W2; }
EnumMap<Enum1, Object> map = new EnumMap<Enum1, Object>(Enum1.class);
map.put(Enum1.V1, new Object());
map.get(Enum2.W1);
现在get方法显然应该返回null.但是,正如我所说,地图内部只有一个数组,在这种情况下大小为2,新对象在第一个插槽中,null在第二个插槽中.当它传递给put()时,它没有存储对Enum1.V1的引用.但是,方法get现在需要知道传递的值不属于正确的枚举,因此映射中没有此键的值.这里也需要正确枚举的类型,为此你需要将类型传递给构造函数.
如果没有向构造函数提供有关枚举的一些信息,它将不知道您打算使用哪个枚举这个映射实例.即使您编写新的EnumMap< MyEnum,SomeValue>(),由于类型擦除,构造函数也无法知道泛型类型参数的值MyEnum.因此,需要另一种方法将信息传递给构造函数.
内容总结
以上是互联网集市为您收集整理的Java EnumMap参数混淆全部内容,希望文章能够帮你解决Java EnumMap参数混淆所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。