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");
}
}
}
이것은 유창한 인터페이스 연습입니다. 실제 코드에서는 절대 사용하지 않을 것입니다!
고전적인 방법으로 가십시오. 다른 사람이 코드를 읽는 것을 혼동하지 않습니다!
답변
더 이해가 잘된다면 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
}
답변
좋아 내 두 센트, 문자열 방법을 사용하십시오 :
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");
}