반응형
인스턴스를 '부정'하는 가장 좋은 방법
instanceof
Java에서 부정적이거나 더 좋은 방법이 있는지 생각하고있었습니다 . 실제로, 나는 다음과 같은 일을하고있다 :
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
반응형
'development' 카테고리의 다른 글
EBS 대 인스턴스 스토어의 이점 (및 그 반대) (0) | 2020.02.26 |
---|---|
MVC4의 스타일 (0) | 2020.02.26 |
자기 유형과 특성 서브 클래스의 차이점은 무엇입니까? (0) | 2020.02.26 |
알려진 값 세트를 사용하여 정수가 두 정수 (포함) 사이에 있는지 판별하는 가장 빠른 방법 (0) | 2020.02.26 |
Chrome 디버거에 '주의 : 임시 헤더가 표시됨' (0) | 2020.02.26 |