[java] enum 값을 int로 변환하는 방법?

int 형식을 반환하는 함수가 있습니다. 그러나 TAX 열거 값만 있습니다.

TAX 열거 형 값을 int로 캐스팅하려면 어떻게해야합니까?

public enum TAX {
    NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);

    private int value;
    private TAX(int value){
        this.value = value;
    }
}

TAX var = TAX.NOTAX; // This value will differ

public int getTaxValue()
{
  // what do do here?
  // return (int)var;
}



답변

열거 형을 value어떻게 든 노출시켜야합니다.

public enum Tax {
    NONE(0), SALES(10), IMPORT(5);

    private final int value;
    private Tax(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

...

public int getTaxValue() {
    Tax tax = Tax.NONE; // Or whatever
    return tax.getValue();
}

(나는 이름을 조금 더 전통적이고 읽기 쉬운 것으로 바꿨다.)

이되는 가정 생성자에 할당 된 값을합니다. 그것이 당신이 원하는 것이 아니라면, 우리에게 더 많은 정보를 제공해야합니다.


답변

나는 이것을 선호한다 :

public enum Color {

   White,

   Green,

   Blue,

   Purple,

   Orange,

   Red
}

그때:

//cast enum to int
int color = Color.Blue.ordinal();


답변

생성자에 할당하려는 값을 원하면 열거 형 정의에 해당 값을 반환하는 메서드를 추가해야합니다.

열거 형 값을 나타내는 고유 번호를 원하면을 사용할 수 있습니다 ordinal().


답변

언젠가는 C # 접근 방식이 Java 세상에서 삶을 더 쉽게 만듭니다 .. :

class XLINK {
static final short PAYLOAD = 102, ACK = 103, PAYLOAD_AND_ACK = 104;
}
//Now is trivial to use it like a C# enum:
int rcv = XLINK.ACK;


답변

열거 형에 값을 추가하면 문자열이 여전히 유효하기 때문에 정수보다 문자열 표현을 사용하는 것이 좋습니다. 열거 형의 name () 메소드를 사용하여 열거 형 값을 문자열로 변환하고 열거 형의 valueOf () 메소드를 사용하여 문자열에서 열거 형 표현을 다시 작성할 수 있습니다. 다음 예제는 열거 형 값을 문자열로 변환하는 방법을 보여줍니다 (ValueType은 열거 형임).

ValueType expected = ValueType.FLOAT;
String value = expected.name();

System.out.println("Name value: " + value);

ValueType actual = ValueType.valueOf(value);

if(expected.equals(actual)) System.out.println("Values are equal");


답변

public enum Tax {

NONE(1), SALES(2), IMPORT(3);

private final int value;
    private Tax(int value) {
        this.value = value;
    }

    public String toString() {
        return Integer.toString(value);
    }
}

class Test {
    System.out.println(Tax.NONE);    //Just an example.
}


답변

다소 다른 접근법 (적어도 안드로이드에서는)은 IntDef 주석을 사용하여 일련의 int 상수를 결합하는 것입니다

@IntDef({NOTAX, SALESTAX, IMPORTEDTAX})
@interface TAX {}
int NOTAX = 0;
int SALESTAX = 10;
int IMPORTEDTAX = 5;

함수 매개 변수로 사용하십시오.

void computeTax(@TAX int taxPercentage){...} 

또는 변수 선언에서 :

@TAX int currentTax = IMPORTEDTAX;