java - Java 1.6 中的枚举类主体特性

标签 java enums

enum CoffeeSize{               
      BIG(8),   
      HUGE(10),   
      OVERWHELMING(16) {   

       public String getLidCode(){   
            return "A";   
       }   
      };   

    private int ounces;   

    public int getOunces(){   
         return ounces;   
    }    

    CoffeeSize(int ounces){   
        this.ounces = ounces;   
    }   

    public String getLidCode(){   
            return "B";   
    }   
}  

这是 K&B 6 书中的 SCJP 1.6 问题。 这是作为 SCJP 6 的一个特性的常量特定类主体的示例。我如何执行它并查看结果输出?

我有两个问题:

  1. 我的 Java main 方法是什么样的?请帮助我执行这部分代码。我无法理解输出的行为方式。

  2. getLidCode() 方法如何在 Java 1.6 的此类主体中工作?

最佳答案

你所说的常量特定类体就是JLS指的是枚举常量的可选类主体。它作为匿名内部类实现,扩展 外部封闭枚举。因此,在您的情况下,枚举常量 OVERWHELMING 将是扩展 CoffeeSize 并覆盖方法 getLidCode() 的匿名内部类型。在伪代码中,内部类看起来像这样:

class CoffeeSize$1 extends CoffeeSize {
    @Override
    public String getLidCode() {
        return "A";
    }
}

在常量 BIGHUGE 上调用 getLidCode() 将调用基本枚举实现,而在 上调用相同的方法>OVERWHELMING 将调用该方法的覆盖版本,因为 OVERWHELMING 实际上是不同的类型。要进行测试,只需运行代码来调用不同枚举常量的 getLidCode()

System.out.println(CoffeeSize.BIG.getLidCode());
System.out.println(CoffeeSize.HUGE.getLidCode());
System.out.println(CoffeeSize.OVERWHELMING.getLidCode());

关于java - Java 1.6 中的枚举类主体特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15300816/

相关文章:

Java Enum 数据长值被设置为零

c++ - 在 C++ 中,枚举数据类型占用多少内存?

c# - C# 中枚举的行为

java - 用于 ElasticSearch 的 Spring Boot Micrometer 与 APM Java 代理

java - 从 war 中加载图像

java - 视频结束后返回 Activity

java - Trove 库队列实现

java - 如何从 thymeleaf 的 URL 中隐藏模型数据?

java - 获取枚举值数组减去指定项

swift - 创建带参数的枚举