문제

방법이 있습니다.

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*/}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top