2013-08-28 2 views
2

일부 Java 연습을하고 인스턴스 변수의 범위에 제한을 부과하는 방법을 찾아 내려고했습니다.java에서 클래스의 인스턴스 변수 범위를 구분하는 방법은 무엇입니까?

예를 들어 Time이라는 클래스를 생성했습니다. 그것은 3 개의 인스턴스 변수,시, 분, 초를 가지고 있습니다.

예를 들어, 0에서 23 사이의 시간이 필요합니다. 시간 변수를 조작하기 위해이 클래스 내부에 몇 가지 메소드가 있습니다. 하지만 시간이 항상 0에서 23 사이인지 확인해야합니다.

나는 열거 형 메서드가 있음을 알고 있습니다. 이처럼

public enum hour { 
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
    21, 22, 23 
} 

시간 클래스에 시간 유형 변수를 삽입하십시오.

하지만 시간이 double 유형의 변수, 연속 변수 인 경우 어떻게 될까요? 그리고 상한선과 하한선이 있습니다. 연속 변수를 어떻게 구분합니까?

+1

한 시간을 사용할 수 있습니다. 한 시간 내에 전체적으로 저장되지 않는 값은 분 단위로 저장되고 초 단위로 저장되고 밀리 초 단위로 저장됩니다. 자, 왜 이러는거야? –

답변

3

제한을 설정하는 컴파일러 절약 방법이 없습니다. 가능한 (항상 권장되는) 방법은 private 변수를 사용하고 setter 메서드에서 경계를 확인하고 경계가 정확하지 않으면 RuntimeException을 throw하는 것입니다.

예 :

public class Time { 
    private double hour; 

    public void setHour(double hour) { 
     if(hour < 0) { // and so on - i think you can imagine the logical expression 
      throw new IllegalArgumentException("hour "+hour+" is not valid."); 
     } 
     this.hour = hour; 
    } 
} 
+0

안녕하세요, Sorontur, 당신 말이 맞아요. 오류 발생 방법을 알고 있습니다. 클래스의 Time을 조작하는 메서드가 여러 개있는 경우 모든 메서드에서 예외를 throw해야합니다. 나는 참을성이 없었다. 이제 예외 처리가 가장 좋은 방법이라는 것을 알고 좋은 코딩 습관입니다. 맞습니까? –

+0

네, 그게 좋은 생각이라고 생각합니다 :) – Sorontur

0

그것은 가능 유형과 같은 Hour, MinuteSecond을 모델링하고, 각 유형에 대한 적절한 검사 범위를 적용 (일부도이 올바른 방법입니다 말할 것입니다).

class Hour { 
    final int val; 

    Hour(int val) { 
     if (val < 0 || val > 23) { 
      throw new IllegalArgumentException("Out of range [0...23]: " + val); 
     } 
     this.val = val; 
    } 

    // ... 
} 
1

당신은 double 형 변수 안 bean validators

public class Time { 

@Min(0) @Max(23) 
private int hour; 

public void setHour(int hour) { 
    this.hour = hour; 
    } 
} 
+0

안녕하세요, yeforriak, 조언 해 주셔서 감사합니다. 빈 검증 도구는 강력한 도구 인 것 같습니다. 하지만 Java EE를 실행하지 않습니다. Eclipse Standard에서 사용할 수 있습니까? –

+0

@FriedrichPei 자바 SE에서 JSR-303을 사용할 수 있습니다. http://jcp.org/en/jsr/detail?id=303 – yeforriak

+0

여기에 예제가 있습니다. http://java.dzone.com/articles/bean- 유효성 검사 - 단순함 – yeforriak

관련 문제