最好的方法来“否定”一个实例

我在想,如果存在一个更好/更好的方式来否定Java中的instanceof。 其实我是这样做的:

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

但是,我认为这应该存在一个“美丽”的语法来做到这一点。

有人知道它是否存在以及语法如何?


编辑:美丽,我可能会说这样的事情:

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

不,没有更好的办法; 你的是规范的。

当你说“美丽”时,我不知道你想象的是什么,但是这个呢? 我个人认为这比你发布的经典forms更糟糕,但有人可能会喜欢它。

 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 */ } 

或者你可以写代码,所以你不需要知道它是否是一个string。 例如

 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"); } } } 

这只是一个stream利的界面练习,我从来没有用现实生活中的代码!
去经典的方式,它不会混淆别人读你的代码!

好吧,我的两个美分,使用一个string的方法:

 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"); } 

或者干脆如果 – 否则…

 if (str instanceof String) { } else { // Your code, please. } 

怎么了

 if (!(x instanceof y)) { }