当前位置: 首页 > 面试题库 >

Java枚举getDeclaringClass与getClass

华知
2023-03-14
问题内容

Java Enum类的文档声明以下内容getDeclaringClass

返回与此枚举常量的枚举类型相对应的Class对象。当且仅当e1.getDeclaringClass()==
e2.getDeclaringClass()时,两个枚举常量e1和e2属于相同的枚举类型。(对于具有特定于常量的类主体的枚举常量,此方法返回的值可能不同于Object.getClass()html" target="_blank">方法返回的值。)

我不了解何时getClassgetDeclaringClass与众不同。有人可以提供示例和说明吗?


问题答案:

Java枚举值允许具有特定于值的类主体,例如(并且我希望此语法正确…)

public enum MyEnum {

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


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

这将产生代表类机构的内部类AB。这些内部类将是的子类MyEnum

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

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

对于简单枚举(即那些没有特定于常量的类主体),getClass()getDeclaringClass()返回同样的事情。



 类似资料:
  • 本文向大家介绍Java枚举与.net枚举区别详解,包括了Java枚举与.net枚举区别详解的使用技巧和注意事项,需要的朋友参考一下 通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚举一些错误理解及部分有缺陷的应用,其实追其原因还是因为我会习惯性的认为java的枚举在作用以及定义上与.net应该是差不多的,毕竟两者都是高级语言,语言上也有很多相

  • 问题内容: 在Java中使用标志时,我看到了两种主要方法。使用int值和一组if-else语句。另一个是使用枚举和case-switch语句。 我想知道在使用枚举和整数进行标记之间在内存使用和速度方面是否存在差异? 问题答案: 双方并可以同时使用开关或IF-THEN-ELSE和内存使用情况也是最小的两个,而速度是类似的-有关于你提到的点之间没有显著差异。 但是,最重要的区别是类型检查。被检查,不是

  • 主要内容:声明枚举,枚举类,为枚举添加方法,EnumMap 与 EnumSet枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enu

  • 问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其

  • 问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记

  • 让我们看看一个需要诉诸于代码的场景,来考虑为何此时使用枚举更为合适且实用。假设我们要处理 IP 地址。目前被广泛使用的两个主要 IP 标准:IPv4(version four)和 IPv6(version six)。这是我们的程序可能会遇到的所有可能的 IP 地址类型:所以可以 枚举 出所有可能的值,这也正是此枚举名字的由来。 任何一个 IP 地址要么是 IPv4 的要么是 IPv6 的,而且不能