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

在Java中,类内的枚举类型是静态的吗?

步博艺
2023-03-14
问题内容

我似乎无法像从内部类内部那样从枚举内部访问周围类的实例成员。这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,还是必须在需要的地方将实例传递给枚举的方法?

public class Universe {
    public final int theAnswer;

    public enum Planet {
        // ...
        EARTH(...);
        // ...

        // ... constructor etc.

        public int deepThought() {
            // -> "No enclosing instance of type 'Universe' is accessible in this scope"
            return Universe.this.theAnswer;
        }
    }

    public Universe(int locallyUniversalAnswer) {
        this.theAnswer = locallyUniversalAnswer;
    }
}

问题答案:

是的,嵌套枚举是隐式静态的。

嵌套枚举类型是隐式静态的。可以将嵌套枚举类型显式声明为静态。a



 类似资料:
  • 问题内容: 这来自有效的Java: 请注意,操作常量是从创建常量之后运行的静态块放入stringToEnum映射中的。试图使每个常量从其自己的构造函数中放入映射中将导致编译错误。这是一件好事,因为如果合法,它将导致NullPointerException。除编译时常量字段外,不允许枚举构造函数访问枚举的静态字段。此限制是必需的,因为在构造函数运行时尚未初始化这些静态字段。 我的问题是关于这条线的:

  • 问题内容: public enum Operations { 在上面的代码中,两个操作的操作值都会更改。如何有两个具有不同操作类型的Operations.SINGLE实例? 问题答案: 是的,实例是隐式的和。这意味着代码是不明智的。想象两个线程都在调用;您将不会对自己的通话充满信心。 根据Java语言规范的8.9节: 枚举类型(§8.9)不能声明为抽象;这样做会导致编译时错误。 枚举类型是隐式最终

  • 枚举类(“新的枚举”/“强类型的枚举”)主要用来解决传统的C++枚举的三个问题: 传统C++枚举会被隐式转换为int,这在那些不应被转换为int的情况下可能导致错误 传统C++枚举的每一枚举值在其作用域范围内都是可见的,容易导致名称冲突(同名冲突) 不可以指定枚举的底层数据类型,这可能会导致代码不容易理解、兼容性问题以及不可以进行前向声明 枚举类(enum)(“强类型枚举”)是强类型的,并且具有类

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

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S