2013-02-27 3 views
1

null 일 경우 나는 정말로 지쳐있다. 검사, resp. 또한이를 위해보다 구성 가능한 시나리오를 원합니다. 예를 들어 설명해 드리겠습니다.null이 아니거나 Java에 설정되지 않은 경우 할당

저는 getter()입니다. 두 경우 모두 null 또는 '0'이 반환 될 수 있습니다. setter()getter()을 전달하여 호출하면 안됩니다.

그래서 구현 getter()setter() 정말 긴 메서드 호출하고 나는이에 대한 도우미 변수를 도입해야 특히,

if(getter() != null && !getter().equals('0')) setter(getter()); 

이 그러나 정말 날 anoys입니다.

나는 매개 변수 정확히 같은 일을

ifNotSet(getter(), setter(), new Object[null, '0']); 

와 방법에 대해 생각하고있다. 이

  • 세터조건이 동일하지 하나를 수행하는 경우 방법 확인 - - ifNotSet에 매개 변수

    • 게터은 어디 방법은 방법으로 전화를 setter(getter)경우 조건 적용되지 않음
    • 조건 - 실행할 방법에 대해 getter()의 평가에 적용해서는 안되는 조건

    처음에는 이것이 복잡해 보이지는 않지만 그렇습니다! 누구든지이 문제 또는 어떤 종류의 구현에 대한 해결책을 알고 있습니까?

    감사합니다.

    내가 너희들의 의견을 한 후,이 문제에 좀 더 노력하고 다음

    private boolean ns(Object[] condition, Object getter) { 
        boolean ret = false; 
        for (Object object : condition) { 
         if(getter) equals or == ?? 
        } 
        return true; 
    } 
    
        Object[] cond = new Object[] { null, "0" }; 
        Object a; 
    if (ns(cond, a = getter()))setter(a); 
    

    음에 대해 알게 된 한

    업데이트,이 것 같았다 적어도 할 일이 많은 경우 솔루션입니다. 그러나 ns() 방법을 살펴보면 ... 들어오는 조건에 대한 질문은 == 또는 equals을 사용하여 비교를 할 것인가입니다!

  • +0

    "null 인 경우 모든 검사를 수행하는 데 정말로 지쳤습니다."- Groovy와 그 "안전한 탐색"연산자 ("?")를 살펴보십시오. http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator – tbsalling

    +1

    왜 isNullOrZero (x) 메소드를 만들지 않습니까? 그래서,() isNullOrZero (getter()) setter (getter());' – vikingsteve

    +0

    => Option type에서 getOrElse 메소드를 가져온 스칼라 덕분에 :) ... 자바가 가지고있는 것처럼 null 객체도없고 추한 코드도 없다. ;) – Mik378

    답변

    1

    Java 메소드에서와 같이 일급 시민이 할 수없는 일은 할 수 없습니다. 리플렉션이나 익명 클래스를 사용할 수 있지만 더 많은 작업이 될 것입니다.

    0과 0이 항상 getter에 해당하는 경우 두 개 중 하나만 반환하도록 변경할 수 있습니까?

    0과 0이 항상 setter에 해당하는 경우 두 개를 정규화하도록 변경할 수 있습니까?

    당신은 당신이 방법을 사용할 수 있습니다 다음

    if (!isNullOrZero(getter())) { 
        setter(getter()); 
    } 
    
    +0

    여기에, 나는 어떤 getter() 짧은 - 컷하지 않는 메서드를 구현해야 할 것이라고 :(피드백 thx, 그것을 주셔서 감사합니다! –

    3

    을 할 수있는 방법 isNullOrZero(x)을 만들 수

    public boolean checkNotNullOrZero(String s) 
        { 
        return (s!=null) && !s.equals("0"); 
        } 
    

    기본 사용 : 말 그대로이 일을

    if(checkNotNullOrZero(getter())) 
    { 
    setter(getter()); 
    } 
    
    +0

    흠,하지만이 방법은 각 checkNotNullOrZero 구현해야 할 것이라고 setter(), 나도 그렇습니까? 그래서 bot setter와 getter 메소드가 항상 바뀌면 일반적인 것이 아닙니다! –

    1

    추악한 방법 자바 :

    public interface Getter { 
        public Object get(); 
    } 
    
    public interface Caller { 
        public void call(); 
    } 
    
    public void callIfNotNull(Getter getter, Caller caller, Object[] nullObjects) { 
        Object value = getter.get(); 
        for(Object nullObject : nullObjects) { 
         if(value==nullObject) { 
          return; 
         } 
        } 
        caller.call(); 
    } 
    

    사용 :가 null 객체를 확인하고 적절한 이름을 부여하는 온건 한 방법을 구현해야 할 수도 있습니다

    callIfNotNull(new Getter() { 
         @Override 
         public Object get() { 
          return getterMethod(); 
         } 
        }, new Caller() { 
          @Override 
          public void call() { 
           setter(); 
          } 
         }, new Object[]{null, '0'}); 
        } 
    

    .

    Personnaly, 나는이 방법을 사용하지 않을 것입니다. 문제를 해결하기 위해 Null Object pattern을 구현하려고합니다.

    +0

    훨씬 더 효과적입니다! 단축키가 아니기 때문에 구현하는 것이 좋지 않습니다. 문제 : thx 그러나 의견 +1 패턴을 봐야합니다! –

    관련 문제