考虑以下两段代码(您可以假设execeptionObj
是Object
类型,但我们知道它是Throwable
的实例):
1)
logger.log(Level.ERROR, (Throwable) exceptionObj,
((Throwable) exceptionObj).getMessage());
2)
Throwable t = new Throwable((Throwable)exceptionObj);
logger.log(Level.ERROR, t, t.getMessage());
在我正在研究的项目的代码审查中,一位审查员说,第一种方法没有第二种方法有效,因为它涉及2个强制转换。我只是想知道你的想法。似乎创建一个新实例也会涉及一些开销。
最佳答案
这两段代码做不同的事情。在第二个中,您将不再传递exceptionObj,而是传递“由exceptionObj引起的未指定Throwable”。我认为那不是你想要的。
您是说第二行的第一行是:
Throwable t = (Throwable) exceptionObj;
我想这会稍微提高一点效率,但不会让它决定问题。哪个更易读是关键,我认为(修改后的)第二个更易读。
您是否真的需要对Throwable进行案例分析?确定记录器已经采用了Throwable吗?
关于java - 类型转换两次或创建新实例是否更有效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2378290/