我在想是否存在更好/更好的方法来否定instanceofJava中的内容.实际上,我正在做的事情如下:
if(!(str instanceof String)) { /* do Something */ }
Run Code Online (Sandbox Code Playgroud)
但我认为应该存在一个"漂亮"的语法.
有谁知道它是否存在,以及语法是什么样的?
编辑: 美丽,我可能会这样说:
if(str !instanceof String) { /* do Something */ } // compilation fails
Run Code Online (Sandbox Code Playgroud)
Nat*_*tix 124
当你说"美丽"时,我不知道你的想象,但是这个怎么样?我个人认为它比你发布的经典形式更糟糕,但有人可能会喜欢它......
if (str instanceof String == false) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
dac*_*cwe 56
你可以使用这个Class.isInstance方法:
if(!String.class.isInstance(str)) { /* do Something */ }
Run Code Online (Sandbox Code Playgroud)
......但它仍然被否定,非常丑陋.
Pet*_*rey 22
通常你也不想只是if一个else条款.
if(!(str instanceof String)) { /* do Something */ }
else { /* do something else */ }
Run Code Online (Sandbox Code Playgroud)
可写成
if(str instanceof String) { /* do Something else */ }
else { /* do something */ }
Run Code Online (Sandbox Code Playgroud)
或者您可以编写代码,这样您就不需要知道它是否为String.例如
if(!(str instanceof String)) { str = str.toString(); }
Run Code Online (Sandbox Code Playgroud)
可写成
str = str.toString();
Run Code Online (Sandbox Code Playgroud)
Pab*_*afi 12
如果你可以使用静态导入,你的道德准则允许它们
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后...
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个流畅的界面练习,我从来没有在现实代码中使用它!
按照你的经典方式,它不会混淆任何阅读你的代码的人!
如果你觉得它更容易理解,你可以使用 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137074 次 |
| 最近记录: |