Java Enum getDeclaringClass 与 getClass

发布于 2024-11-03 02:12:07 字数 365 浏览 0 评论 0原文

Java Enum 类的文档对 getDeclaringClass 进行了以下说明:

返回对应的Class对象 到此枚举常量的枚举类型。二 枚举常量 e1 和 e2 是 相同的枚举类型当且仅当 e1.getDeclaringClass() == e2.getDeclaringClass()。 (值 此方法返回的结果可能有所不同 从返回的 枚举的 Object.getClass() 方法 具有常量特定类的常量 尸体。)

我不明白 getClassgetDeclaringClass 何时不同 有人可以提供一个例子并进行解释吗?

The docs for the Java Enum class state the following about getDeclaringClass:

Returns the Class object corresponding
to this enum constant's enum type. Two
enum constants e1 and e2 are of the
same enum type if and only if
e1.getDeclaringClass() ==
e2.getDeclaringClass(). (The value
returned by this method may differ
from the one returned by the
Object.getClass() method for enum
constants with constant-specific class
bodies.)

I don't understand when getClass and getDeclaringClass are different. Can someone provide an example along with an explanation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身骄傲 2024-11-10 02:12:07

Java 枚举值允许具有特定于值的类体,例如(我希望这个语法是正确的...)

public enum MyEnum {

   A {
       void doSomething() { ... }
   },


   B {
       void doSomethingElse() { ... }
   };
}

这将生成表示 AB< 的类体的内部类/代码>。这些内部类将是 MyEnum 的子类。

MyEnum.A.getClass() 将返回代表 A 类主体的匿名类,这可能不是您想要的。

另一方面,MyEnum.A.getDeclaringClass() 将返回表示 MyEnumClass 对象。

对于简单的枚举(即没有特定于常量的类体的枚举),getClass()getDeclaringClass() 返回相同的内容。

Java enum values are permitted to have value-specific class bodies, e.g. (and I hope this syntax is correct...)

public enum MyEnum {

   A {
       void doSomething() { ... }
   },


   B {
       void doSomethingElse() { ... }
   };
}

This will generate inner classes representing the class bodies for A and B. These inner classes will be subclasses of MyEnum.

MyEnum.A.getClass() will return the anonymous class representing A's class body, which may not be what you want.

MyEnum.A.getDeclaringClass(), on the other hand, will return the Class object representing MyEnum.

For simple enums (i.e. ones without constant-specific class bodies), getClass() and getDeclaringClass() return the same thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文