Java : 메소드의 열거 매개 변수
-
02-07-2019 - |
문제
방법이 있습니다.
private static String drawCellValue(
int maxCellLength, String cellValue, String align) { }
알 수 있듯이 Align이라는 매개 변수가 있습니다. 이 메소드 내에서 값이 '왼쪽'또는 '오른쪽'인지 여부에 대한 IF 조건이있을 것입니다. 매개 변수를 문자열로 설정하면 분명히 문자열 값을 전달할 수 있습니다. 가능한지 알고 싶습니다. 메소드 매개 변수로 열거 값을 갖기 위해서는 어떻게?
누군가가 이것에 대해 생각하는 경우를 대비하여; 나는 부울 가치를 사용하는 것에 대해 생각했지만 실제로는 좋지 않습니다. 첫째, true/false를 왼쪽/오른쪽과 연관시키는 방법은 무엇입니까? (OK, 나는 댓글을 사용할 수 있지만 여전히 더러워진다는 것을 알 수 있습니다.) 둘째, '정당화'와 같은 새로운 값을 추가하기로 결정할 수 있으므로 2 개 이상의 가능한 값이 있으면 부울 유형을 사용할 수 없습니다.
어떤 아이디어?
해결책
이렇게해야합니다.
private enum Alignment { LEFT, RIGHT };
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
if (align == Alignment.LEFT)
{
//Process it...
}
}
다른 팁
열거 된 냉각기도 스위치를 사용할 수 있습니다.
switch (align) {
case LEFT: {
// do stuff
break;
}
case RIGHT: {
// do stuff
break;
}
default: { //added TOP_RIGHT but forgot about it?
throw new IllegalArgumentException("Can't yet handle " + align);
}
}
열거는 예외의 출력이 임의의 int 값이 아니라 열거 값의 이름이기 때문에 시원합니다.
나는 이것을 훨씬 더 좋아한다. IF/스위치를 줄입니다.
private enum Alignment { LEFT, RIGHT;
void process() {
//Process it...
}
};
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
align.process();
}
물론, 그것은 다음과 같습니다.
String process(...) {
//Process it...
}
물론, 당신은 열거를 사용할 수 있습니다. 다음과 같은 작업이 있습니까?
enum Alignment {
LEFT,
RIGHT
}
개인 정적 문자열 DrawCellValue (int maxCellLength, String CellValue, 정렬 정렬) {}
부울을 사용하려면 정렬 매개 변수 이름을 Alignleft와 같은 것으로 바꿀 수 있습니다. 나는이 구현이 깨끗하지 않다는 데 동의하지만, 많은 변화를 예상하지 않고 공개 인터페이스가 아니라면 좋은 선택 일 수 있습니다.
SwingConstants를 재사용 할 수도 있습니다. {왼쪽, 오른쪽}. 그것들은 열거적이지 않지만 이미 존재하며 여러 곳에서 사용됩니다.
나는 열거를 가득 채운 클래스로 사용하고 사용하겠다고 확신하지 못합니다. 이것은 객체 지향 언어이며, 객체 방향의 가장 기본적인 신조 중 하나는 클래스가 한 가지 일을하고 잘 수행해야한다는 것입니다.
열거는 열거적인 일을 잘하고 있으며, 수업은 수업으로서 좋은 일을하고 있습니다. 이 두 가지를 혼합하면 느낌이들 수 있습니다. 예를 들어, 열거의 인스턴스를 메소드에 매개 변수로 전달할 수는 없습니다. 주로 열거 인스턴스를 만들 수 없기 때문입니다.
따라서 Enum.process ()를 할 수는 있지만 ()가해야한다는 의미는 아닙니다.
다음과 같은 매개 변수에서 열거를 사용할 수 있습니다.
public enum Alignment { LEFT, RIGHT }
private static String drawCellValue(
int maxCellLength, String cellValue, Alignment align) {}
그런 다음 스위치 또는 IF 문을 사용하여 실제로 매개 변수로 무언가를 수행 할 수 있습니다.
switch(align) {
case LEFT: //something
case RIGHT: //something
default: //something
}
if(align == Alignment.RIGHT) { /*code*/}