자바 열거 valueOf는 두 개의 매개 변수가?

Code_Control_jxie0755 :

왜 않는 valueOf두 개의 매개 변수를 가지고?

에서 valueOf에 대한 Java 문서

public static <T extends Enum<T>> T valueOf​(Class<T> enumType, String name)

매개 변수 :

enumType - 정수가 반환되는 enum 형의 Class 객체

name - 반환되는 정수의 이름을

하지만 온라인으로 읽을 대부분의 예는 말합니다 :

enum WorkDays {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}

테스트:

WorkDays day1 = WorkDays.valueOf("MONDAY");
System.out.println(day1); // >>>  MONDAY

이 방법은 하나 개의 매개 변수를 사용하는 것 같다?

리노 :

당신은 무엇을 할 때 발생 볼 수있는 바이트 코드를 검사 할 수 있습니다 enum컴파일을 :

public enum TestEnum {A, B}

그리고의 바이트 코드 valueOf:

// access flags 0x9
public static valueOf(Ljava/lang/String;)LTestEnum;
 L0
  LINENUMBER 1 L0
  LDC LTestEnum;.class
  ALOAD 0
  INVOKESTATIC java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
  CHECKCAST TestEnum
  ARETURN
 L1
  LOCALVARIABLE name Ljava/lang/String; L0 L1 0
  MAXSTACK = 2
  MAXLOCALS = 1

나는 바이트 코드의 전문가는 생각하지 않습니다하지만 당신은 줄 것을 볼 수 있습니다 :

INVOKESTATIC java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;

사실 원용에서 java.lang.Enum.valueOf. 자바 상당 같을 것이다 :

public static TestEnum myValueOf(String name) {
    return Enum.valueOf(TestEnum.class, name);
}

그리고 바이트 코드이 확인 :

// access flags 0x9
public static myValueOf(Ljava/lang/String;)LTestEnum;
 L0
  LINENUMBER 6 L0
  LDC LTestEnum;.class
  ALOAD 0
  INVOKESTATIC java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
  CHECKCAST TestEnum
  ARETURN
 L1
  LOCALVARIABLE name Ljava/lang/String; L0 L1 0
  MAXSTACK = 2
  MAXLOCALS = 1

당신은 차이를 볼 수있는이 두 조각을 비교하는 것은입니다 ... 예, 이름 (및 행 번호) :

여기에 이미지 설명을 입력

추천

출처http://43.154.161.224:23101/article/api/json?id=201130&siteId=1