Java에서 Enum start 값을 설정할 수 있습니까?
열거형을 사용하여 몇 가지 상수를 만듭니다.
enum ids {OPEN, CLOSE};
OPEN 값은 0이지만 100으로 해 주세요.가능합니까?
Java enum은 C 또는 C++ enum과는 다릅니다.이것은 실제로는 정수의 라벨에 불과합니다.
Java Enum은 클래스와 더 유사하며 여러 속성을 가질 수도 있습니다.
public enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
가장 큰 차이점은 이 파일들이 타입 세이프하다는 것입니다.따라서 SIZE 변수에 COLOR 열거형을 할당할 필요가 없습니다.
상세한 것에 대하여는, http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 를 참조해 주세요.
예. 다음과 같이 숫자 값을 열거형 생성자에게 전달할 수 있습니다.
enum Ids {
OPEN(100),
CLOSE(200);
private int value;
private Ids(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
자세한 내용은 Sun Java Language Guide를 참조하십시오.
이 방법을 사용하는 것은 어떨까요?
public enum HL_COLORS{
YELLOW,
ORANGE;
public int getColorValue() {
switch (this) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
}
방법은 하나밖에 없다.
static 메서드를 사용하여 다음과 같이 Enum을 매개 변수로 전달할 수 있습니다.
public enum HL_COLORS{
YELLOW,
ORANGE;
public static int getColorValue(HL_COLORS hl) {
switch (hl) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
이 두 가지 방법은 메모리 사용량을 줄이고 프로세스 단위를 증가시킨다는 점에 유의하십시오.나는 이것이 최선의 방법이라고 말하지 않고 단지 다른 접근법일 뿐이다.
매우 큰 열거형을 사용하는 경우 다음과 같은 것이 도움이 됩니다.
public enum deneme {
UPDATE, UPDATE_FAILED;
private static Map<Integer, deneme> ss = new TreeMap<Integer,deneme>();
private static final int START_VALUE = 100;
private int value;
static {
for(int i=0;i<values().length;i++)
{
values()[i].value = START_VALUE + i;
ss.put(values()[i].value, values()[i]);
}
}
public static deneme fromInt(int i) {
return ss.get(i);
}
public int value() {
return value;
}
}
C/C++ 의 에뮬레이트 열거형(기본값 및 nexts 증분)을 사용하는 경우:
enum ids {
OPEN, CLOSE;
//
private static final int BASE_ORDINAL = 100;
public int getCode() {
return ordinal() + BASE_ORDINAL;
}
};
public class TestEnum {
public static void main (String... args){
for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) {
System.out.println(i.toString() + " " +
i.ordinal() + " " +
i.getCode());
}
}
}
OPEN 0 100 CLOSE 1 101
Ordinal() 함수는 열거형 ID의 상대 위치를 반환합니다.이를 사용하여 C 스타일 열거형처럼 오프셋이 있는 자동 인덱싱을 얻을 수 있습니다.
예:
public class TestEnum {
enum ids {
OPEN,
CLOSE,
OTHER;
public final int value = 100 + ordinal();
};
public static void main(String arg[]) {
System.out.println("OPEN: " + ids.OPEN.value);
System.out.println("CLOSE: " + ids.CLOSE.value);
System.out.println("OTHER: " + ids.OTHER.value);
}
};
출력을 제공합니다.
OPEN: 100
CLOSE: 101
OTHER: 102
편집: 방금 이것이 grandes의 답변과 매우 유사하다는 것을 깨달았습니다만, 매우 깔끔하고 C스타일의 열거형에 거의 가깝기 때문에 여기에 둡니다.
@syslogf
열거형은 싱글톤과 같다.JVM이 인스턴스를 만듭니다.
클래스와 함께 직접 작성하면 이렇게 보일 수 있습니다.
public static class MyEnum {
final public static MyEnum ONE;
final public static MyEnum TWO;
static {
ONE = new MyEnum("1");
TWO = new MyEnum("2");
}
final String enumValue;
private MyEnum(String value){
enumValue = value;
}
@Override
public String toString(){
return enumValue;
}
}
다음과 같이 사용할 수 있습니다.
public class HelloWorld{
public static class MyEnum {
final public static MyEnum ONE;
final public static MyEnum TWO;
static {
ONE = new MyEnum("1");
TWO = new MyEnum("2");
}
final String enumValue;
private MyEnum(String value){
enumValue = value;
}
@Override
public String toString(){
return enumValue;
}
}
public static void main(String []args){
System.out.println(MyEnum.ONE);
System.out.println(MyEnum.TWO);
System.out.println(MyEnum.ONE == MyEnum.ONE);
System.out.println("Hello World");
}
}
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
@scottf, 아마 ENUM에 정의되어 있는 컨스트럭터 때문에 혼란스러울 것입니다.
제가 설명해 드릴게요.
언제class loader
로드enum
그럼, 수업enum
컨스트럭터도 호출됩니다.뭘로!!네, 시작입니다.OPEN
그리고.close
. 어떤 가치로100
위해서OPEN
그리고.200
위해서close
다른 가치를 가질 수 있나요?
네.
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
id1.setValue(2);
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
public void setValue(int value) { id = value; }
}
하지만 그것은 나쁜 관행이다. enum
를 나타내는 데 사용됩니다.constants
맘에 들다days of week
,colors in rainbow
즉, 사전 정의된 상수의 작은 그룹.
C++ 열거자를 보고 헷갈리신 것 같아요.Java 열거자는 다릅니다.
C/C++ enum에 익숙한 경우 다음과 같이 됩니다.
public class TestEnum {
enum ids {
OPEN,
CLOSE,
OTHER;
public final int value = 100 + ordinal();
};
public static void main(String arg[]) {
System.out.println("OPEN: " + ids.OPEN.value);
System.out.println("CLOSE: " + ids.CLOSE.value);
System.out.println("OTHER: " + ids.OTHER.value);
}
};
언급URL : https://stackoverflow.com/questions/1067352/can-i-set-enum-start-value-in-java
'programing' 카테고리의 다른 글
부동 소수점 숫자의 기호, 가수 및 지수를 얻는 방법 (0) | 2022.08.28 |
---|---|
Vuex는 개발 도구를 통해 수동으로 커밋될 때까지 변경을 커밋하지 않습니다. (0) | 2022.08.28 |
Server Socket accept() 메서드를 중단하려면 어떻게 해야 합니까? (0) | 2022.08.28 |
Vue 3: 부모 컴포넌트에서 자녀 컴포넌트로 이벤트 전송 (0) | 2022.08.28 |
Vue: 프로펠러 함수의 기본값 (0) | 2022.08.28 |