您的位置:首页 > 产品设计 > UI/UE

Java中Enum类下的values()方法的由来

2014-02-27 20:35 375 查看
有如下Enum类:

public enum Test{

 A,B,C

}

该类下有values()方法,但查API可知道java.lang.Enum<ElementType>下根本没有这个方法,该方法在java.lang.annotation.ElementType类下(public
enum ElementType extends Enum<ElementType>),我们先看看编译后,用javap命令查看编译后的内容:

C:\>javap Test
Compiled from "Test.java"

public final class Test extends java.lang.Enum<<FONT color=#fe3824>Test
> {

  public static final Test A;

  public static final Test B;

  public static final Test C;

  public static Test[] values();
  public static Test valueOf(java.lang.String);
  static {};

}

可以看出,貌似编译后Test是实现了java.lang.annotation.ElementType这个接口,再看其字节码:

 C:\>javap -v Test

Classfile /C:/Test.class

  Last modified 2012-11-22; size 782 bytes

  MD5 checksum 17335f37d5ac9d7fe7d5544782cf7088

  Compiled from "Test.java"

public final class Test extends java.lang.Enum

  Signature: #32                          // Ljava/lang/Enum;

  SourceFile: "Test.java"

  minor version: 0

  major version: 51

  flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_ENUM

Constant pool:

   #1 = Fieldref           #4.#35         //  Test.$VALUES:[LTest;

   #2 = Methodref          #36.#37        //  "[LTest;".clone:()Ljava/lang/Objec

t;

   #3 = Class              #20            //  "[LTest;"

   #4 = Class              #38            //  Test

   #5 = Methodref          #14.#39        //  java/lang/Enum.valueOf:(Ljava/lang

/Class;Ljava/lang/String;)Ljava/lang/Enum;

   #6 = Methodref          #14.#40        //  java/lang/Enum."":(Ljava/lan

g/String;I)V

   #7 = String             #15            //  A

   #8 = Methodref          #4.#41         //  Test."":(Ljava/lang/String;I

)V

   #9 = Fieldref           #4.#42         //  Test.A:LTest;

  #10 = String             #17      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Enum类 values java