我使用遗留库,需要使用cast Object to Collection。 为避免异常,我认为使用instanceof。 所以问题二: 1.如果我使用instanceof - 需要使用try .. catch cast exception以避免异常? 2.它是否达到了性能? 感谢。
答案 0 :(得分:5)
如果您使用instanceOf
,则不需要try-catch(ClasscastException e)
。 instanceOf
即使使用null
,也可以使用instanceof
。
在今天的虚拟机中,投射并未显示出任何可衡量的性能影响。相反,如果你发现经常进行铸造,那么请重新审视你的设计。
注意:由于类型擦除,{{1}}不能与Generics一起使用。
答案 1 :(得分:1)
Instanceof并没有真正影响现代JVM的性能,任何影响都可以忽略不计。
这里有an article on this subject一些数据!
答案 2 :(得分:1)
有时,在运行时知道对象的类型很有用,特别是在转换时。在Java中,无效的强制转换会导致运行时错误。在编译时可以捕获许多无效的强制转换。但是,涉及类层次结构的强制类型转换可能会生成只能在运行时检测到的无效强制转换。 Java提供了运行时操作符instanceof来回答这个问题。它没有任何例外。 现代JVM / JIC编译器已经消除了大多数传统上“慢”操作的性能损失,包括实例,异常处理,反射等。
因此不用担心,但你不能在他们不在那里工作的集合中使用它。 java generics and instanceof