有時候你甚至可能不知道你插入代碼的環境有多個類加載器。在這種情況下,我是否仍然期望操作「==」對枚舉值有效?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. PropertyPlaceholderConfigurer與自定義類加載器
- 6. JPA與JTA有類加載器問題
- 7. 加載類與包
- 8. 卸載類加載器
- 9. RMI類加載器
- 10. 將enum與EF
- 11. enum匹配類
- 12. 生成整數的與Enum類型
- 13. MySQL數據類型:int與enum
- 14. 如何儀器類加載自定義類加載器?
- 15. Java類加載器:爲什麼先搜索父類加載器?
- 16. Symfony的類加載器不會加載
- 17. swf加載類加載器參數
- 18. 在Ruby中加載Url類加載器
- 19. Java類加載 - 哪個類加載器和/或類導致加載?
- 20. Java加密存儲器類加載器
- 21. 與幾個不同的類加載器Singleton類
- 22. Enum-only模板類
- 23. 使用ENUM類型
- 24. jQuery:追加加載的URL與觸發器的類
- 25. 更改類加載器
- 26. Solr插件類加載器
- 27. 處理類加載器
- 28. JVM中的類加載器
- 29. javax.xml.bind.DatatypeConverter泄漏類加載器?
- 30. 獲取rJava類加載器
問題是 - '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