有时候你甚至可能不知道你插入代码的环境有多个类加载器。在这种情况下,我是否仍然期望操作“==”对枚举值有效?enum与类加载器
5
A
回答
-5
"=="
将无法正常工作,但您仍然想要使用.equals()
。
你可能有兴趣在Apache Commons Lang中类:link text
11
多个类加载器可能不是问题,只要枚举只能通过其中的一个。如果情况并非如此,您将失去枚举的所有好处。
顺便说一下,使用equals()
也没有帮助。下面是Enum.equals(Object)
在Java 1.6的实现:
public final boolean equals(Object other) {
return this==other;
}
8
如果枚举类只加载一次它仍然可以工作。
- 您的枚举仅装载的插件内使用
- 枚举已经由个别插件类加载器的父类加载器加载
如果枚举类是由不同的类加载器加载它将不起作用
- 你传递不同插件之间的枚举值,但应用程序cla ssloader尚未加载枚举。 (它仍然可以工作,如果枚举值永远不会插件之间的交叉)
它之所以是这样
Java使用对象实例来表示不同的枚举值,每个实例存储作为枚举类中的静态字段。如果枚举被加载两次,则每个枚举值由两个不同的对象实例表示。 == operator
只比较引用并且不知道表示枚举值的多个实例,所以它将无法匹配不同类加载器加载的值。
相关问题
- 1. NoClassDefFoundError与EJB类加载器
- 2. MVC Enum DropDown - 动态加载
- 3. Enum位域容器类
- 4. 负载类与Java类加载器通过类的forName方法
- 5. 跨类加载器的类加载
- 6. 与默认类加载器和PlayFramework自定义类加载器冲突
- 7. PropertyPlaceholderConfigurer与自定义类加载器
- 8. JPA与JTA有类加载器问题
- 9. 加载类与RequireJS
- 10. 卸载类加载器
- 11. 跨类加载器
- 12. java类加载器
- 13. RMI类加载器
- 14. 类和类加载器
- 15. 加密类加载器
- 16. enum匹配类
- 17. 将enum与EF
- 18. MySQL数据类型:int与enum
- 19. 生成整数的与Enum类型
- 20. Java类加载器:为什么先搜索父类加载器?
- 21. Java类加载器默认类加载器
- 22. 如何仪器类加载自定义类加载器?
- 23. 在Ruby中加载Url类加载器
- 24. swf加载类加载器参数
- 25. Symfony的类加载器不会加载
- 26. 加载一个数组类加载器
- 27. Java类加载 - 哪个类加载器和/或类导致加载?
- 28. 使用类加载器加载扩展另一个类的类
- 29. Java加密存储器类加载器
- 30. 与几个不同的类加载器Singleton类
问题是 - 'equals()`会起作用吗? – 2010-11-26 17:30:28
顺便说一句,Enum`equals()`的实现只是调用`this == other`(Sun/Oracle JDK 6)。 – 2010-11-26 17:32:54
是的,正如我刚刚在我自己的回答中所写的那样 – 2010-11-26 17:34:45