繁体   English   中英

枚举与类加载器

[英]enum vs. class loaders

有时,您甚至可能不知道插入代码的环境有多个类加载器。 在这种情况下,我仍可以期望操作“ ==”将对枚举值起作用吗?

只要枚举只能通过其中之一来使用,多个类加载器就可能不是问题。 如果不是这种情况,您将失去枚举的所有好处。

顺便说一句,使用equals()也无济于事。 这是Java 1.6中Enum.equals(Object)的实现:

public final boolean equals(Object other) { 
    return this==other;
}

如果您的枚举类仅加载一次,它将仍然有效。

  • 您的枚举仅在已加载的插件中使用
  • 枚举已由各个插件类加载器的父类加载器加载

如果您的枚举类是由不同的类加载器加载的,则它将无法正常工作

  • 您在不同插件之间传递枚举值,但应用程序类加载器尚未加载枚举。 (如果枚举值从未在插件之间交叉,它仍然可以工作)

这样的原因

Java使用对象实例来表示不同的枚举值,这些实例中的每个实例都作为静态字段存储在枚举类中。 如果枚举被加载两次,则每个枚举值将由两个不同的对象实例表示。 == operator仅比较引用,并且不知道表示枚举值的多个实例,因此它将无法匹配由不同类加载器加载的值。

"=="将不起作用,但是无论如何您都想使用.equals()

您可能对apache commons lang类感兴趣: 链接文本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM