자바 가 제공 하 는 enum 상세 설명
7787 단어 자바
1. enum 도 class 처럼 멤버 함 수 를 가 질 수 있다 는 것 을 처음 알 았 다.사 칙 연산 의 예 를 들다.
package com.wjy.test;
public enum Operation {
PLUS,MINUS,TIMES,DIVIDE;
double apply(double x,double y){
switch(this){
case PLUS: return x+y;
case MINUS: return x-y;
case TIMES: return x*y;
case DIVIDE: return x/y;
}
throw new AssertionError("Unknown op: "+this);
}
}
호출 코드:
package com.wjy.test;
public class Test {
public static void main(String args[]){
System.out.println(Operation.PLUS.apply(1.0,2.2));
}
}
그러나 이 같은 방식 은 확장 에 불리 하 다 는 점 이 문제 다.새로운 매 거 진 상수 가 추가 되 고 switch 가 문 구 를 추가 하려 면 이 모드 는 매우 취약 합 니 다.
서로 다른 행 위 를 모든 상수 와 연결 시 킬 수 있 는 좋 은 모델 이 있다.
2. 서로 다른 행 위 를 모든 상수 와 관련 시 키 는 방법:
package com.wjy.test;
public enum Operation {
PLUS{ double apply(double x,double y){return x+y;} },
MINUS{ double apply(double x,double y){return x-y;} },
TIMES{ double apply(double x,double y){return x*y;} },
DIVIDE{ double apply(double x,double y){return x/y;} };
abstract double apply(double x,double y);
}
호출 코드
package com.wjy.test;
public class Test {
public static void main(String args[]){
System.out.println(Operation.PLUS);
System.out.println(Operation.PLUS.apply(1.0,2.2));
}
}
실행 결과:
//
PLUS
3.2
문제 가 또 생 겼 다. 왜 '+' 가 아 닌 'PLUS' 를 출력 하 는 지,' + '를 출력 하 게 하기 위해 서 는 toString 방법 을 덮어 써 야 하 는 지.
3. toString 을 다시 불 러 옵 니 다 ()
package com.wjy.test;
public enum Operation {
PLUS("+"){ double apply(double x,double y){return x+y;} },
MINUS("-"){ double apply(double x,double y){return x-y;} },
TIMES("*"){ double apply(double x,double y){return x*y;} },
DIVIDE("/"){ double apply(double x,double y){return x/y;} };
private final String symbol;
Operation(String symbol) {
this.symbol=symbol;
}
@Override
public String toString(){
return symbol;
}
abstract double apply(double x,double y);
}
Option. PLUS 와 "+" 가 연결 되 어 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.