Code_Control_jxie0755 :
왜 않는 valueOf
두 개의 매개 변수를 가지고?
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
당신은 차이를 볼 수있는이 두 조각을 비교하는 것은입니다 ... 예, 이름 (및 행 번호) :