문제

그것은 필요한 세터 방법을 인수 하나?일반적으로 setter 방법에 동수 하나의 값으로는 특정 개체의 속성입니다.하고 싶은 경우에는 어떻게 하 테스트 첫 번째 유효성에 달려 있는 또 다른 인수는 부울,true,검증,첫째,다른 값을 설정합니다.

나의 값을 얻기에서 클라이언트를 통해 ftp 서버입니다.때로는 그 파일에 쓰레기를 포함 값입니다.예를 들어,같은 전화 번호를#3432838#9.그래서 전에 내가 값을 설정 필요 사람들을 제거하 쓰레기는 자입니다.나는 그것을 할 수 있습니에서 세터 방법?그것은 유효한 방법?

감사 무리에 진행!

편집:

이 유효합니다.

public void setSomething(String strValue){ 
     if(checkValidity(strValue)){ 
         // set the value 
     } else { 
         // set the value to an empty string
     }  
  }
도움이 되었습니까?

해결책

그것은 필요한 구체적으로 java 콩 framework 모델이지만,그것은 필수적입니다.

할 수 있습 setter 없이 인수될 때 그들은 의미하는"swith"값을 입력합니다.

void setCheck()

예를 들어 있는 의미를 설정하고"확인"값이 true.

그래서 심지어가 아닌 경우"setter"java 콩적으로,당신이 상상할 수 있는 세터 다른 목적을 위해 사용된다.

Plus,절에 따라 7 의 자바빈 사양,setter 수 있가 하나 이상의 인수, 스를 위한 색인 속성(인덱싱된 속성을 지원합의 범위 값입니다.때마다 이 숙박 시설은 읽거나 기록을 지정하는 지수를 식별하는 값이다.)

void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter

귀하의 경우,유효한 접근하는 것입 추가 런타임 예외가 서명은 우리의 기능입니다.
는 방법 당신은 당신을 넣지 않는 모든 컴파일이 불필요한 예외를 확인에 대한 다른 모든 클래스는 이미를 호출하였습니다.

거나 고려할 수 있습니다 당신의 속성 제한된 객실 추가 non-런타임 예외는 아니다.

제한된 객실 setter 방법을 지원하는 데 필요한 PropertyVetoException.이 문서는 사용자가 사용의 제한된 시설을 시도 업데이트할 수 있습할 거부.그래서 단순한 제한 속성이처럼 보일 수 있:

PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;

수 VetoableChangeListener 추가 할 경우 필요합니다.


에 대해 조각,그것이"유효"하지만 수 있습니다 최적화되지 않기 때문에(에서 말했듯이 이 질문):

  • 검증 캡처해야에서 별도로 필요한 것입 또는 setters 에서 검증 방법입니다.는 방법을 확인해야에서 다시 사용은 여러 요소는 것으로 이용하실 수 있습니다.
  • 그것은 더 나은 빨리 실패 (따라서 내 건의안을 추가하는 예외 setter).

다른 팁

Java Bean Specification Setter에 의해 하나의 인수가 있습니다. 다른 이유를 추가하면 어떤 이유로 든 더 이상 세터로 간주되지 않습니다.

세터는 인수를 "정리"하거나 유효하지 않은 경우 예외를 던지는 데 완벽하게 유효합니다.

왜 안 돼. 입력을 확인하고 검증하는 것은 세터에 포함하기에 좋은 변형입니다. 여기서 질문은 멤버를 검증없이 설정하려는 경우입니다.

아마도 당신이 사용하는 일부 프레임 워크 (콩으로 사용)를 위해 세터의 표준 형태가 필요할 것입니다. 그러나 이런 식으로 제한되지 않으면 이것을 시도 할 수 있습니다.

다른 코드가 유효성 검사를 수행해야한다고 생각되지만 잘못된 값을 설정해서는 안된다고 생각되면 세터에서 Asserts를 사용할 수도 있습니다.

Joshua Bloch (ISBN-13 : 978-0-321-35668-0)의 "Effective Java 2nd Edition"이 책에서 객체 제작에 대한 Bean 컨벤션보다 빌더 패턴을 사용하는 것이 가장 좋다고 말했다.

예를 들어 (Bean Pattern) :

NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);

빌더 패턴이있는 사용 :

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
   calories(100).
   sodium(35).
   carbohydrate(27).
   build();

빌더 패턴의 구현 :

// Builder Pattern
public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    public static class Builder {
        // Required parameters
        private final int servingSize;
        private final int servings;
        // Optional parameters - initialized to default values
        private int calories = 0;
        private int fat = 0;
        private int carbohydrate = 0;
        private int sodium = 0;
        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }
        public Builder calories(int val)
        { calories = val; return this; }
        public Builder fat(int val)
        { fat = val; return this; }
        public Builder carbohydrate(int val)
        { carbohydrate = val; return this; }
        public Builder sodium(int val)
        { sodium = val; return this; }
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }
    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }
}

처음 두 인수가 필요할 때.
유효성 검사를 위해서는 조기 유효성 검사를 사용할 수 있습니다 (각각 <field> 방법) 또는 게으른 검증 (build () 메소드). 형식은 일종의 파이썬 키 값 초기화입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top