最好的方法来“否定”一个实例
我在想,如果存在一个更好/更好的方式来否定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)) { }