development

인스턴스를 '부정'하는 가장 좋은 방법

big-blog 2020. 2. 26. 07:55
반응형

인스턴스를 '부정'하는 가장 좋은 방법


instanceofJava에서 부정적이거나 더 좋은 방법이 있는지 생각하고있었습니다 . 실제로, 나는 다음과 같은 일을하고있다 :

if(!(str instanceof String)) { /* do Something */ }

그러나 나는 이것을하기위한 "아름다운"문법이 존재해야한다고 생각한다.

누군가 존재하고 구문이 어떻게 보이는지 아십니까?


편집 : 아름답게, 나는 이런 식으로 말할 수 있습니다 :

if(str !instanceof String) { /* do Something */ } // compilation fails

더 좋은 방법은 없습니다. 당신은 정식입니다.


나는 당신이 "아름답다"라고 말할 때 당신이 상상하는 것을 모른다. 나는 개인적으로 당신이 게시 한 고전 양식보다 나쁘다고 생각하지만 누군가는 그것을 좋아할 것입니다 ...

if (str instanceof String == false) { /* ... */ }

다음 Class.isInstance방법을 사용할 수 있습니다 .

if(!String.class.isInstance(str)) { /* do Something */ }

...하지만 여전히 부정되고 꽤 추악합니다.


보통 그냥 싶지 않아 if하지만 else절뿐만 아니라.

if(!(str instanceof String)) { /* do Something */ } 
else { /* do something else */ }

로 쓸 수 있습니다

if(str instanceof String) { /* do Something else */ } 
else { /* do something */ }

또는 코드를 작성하여 문자열인지 여부를 알 필요가 없습니다. 예 :

if(!(str instanceof String)) { str = str.toString(); } 

로 쓸 수 있습니다

str = str.toString();

정적 임포트를 사용할 수 있고 도덕적 코드가 허용하는 경우

public class ObjectUtils {
    private final Object obj;
    private ObjectUtils(Object obj) {
        this.obj = obj;
    }

    public static ObjectUtils thisObj(Object obj){
        return new ObjectUtils(obj);
    }

    public boolean isNotA(Class<?> clazz){
        return !clazz.isInstance(obj);
    }
}

그리고...

import static notinstanceof.ObjectUtils.*;

public class Main {

    public static void main(String[] args) {
        String a = "";
        if (thisObj(a).isNotA(String.class)) {
            System.out.println("It is not a String");
        }
        if (thisObj(a).isNotA(Integer.class)) {
            System.out.println("It is not an Integer");
        }
    }    
}

이것은 유창한 인터페이스 연습입니다. 실제 코드에서는 절대 사용하지 않을 것입니다!
고전적인 방법으로 가십시오. 다른 사람이 코드를 읽는 것을 혼동하지 않습니다!


좋아 내 두 센트, 문자열 방법을 사용하십시오 :

public static boolean isString(Object thing) {
    return thing instanceof String;
}

public void someMethod(Object thing){
    if (!isString(thing)) {
        return null;
    }
    log.debug("my thing is valid");
}

더 이해가 잘된다면 Java 8을 사용하여 이와 같은 작업을 수행 할 수 있습니다.

public static final Predicate<Object> isInstanceOfTheClass = 
    objectToTest -> objectToTest instanceof TheClass;

public static final Predicate<Object> isNotInstanceOfTheClass = 
    isInstanceOfTheClass.negate(); // or objectToTest -> !(objectToTest instanceof TheClass)

if (isNotInstanceOfTheClass.test(myObject)) {
    // do something
}

참고 URL : https://stackoverflow.com/questions/9068150/best-way-to-negate-an-instanceof



반응형