考虑以下两段代码(您可以假设execeptionObjObject类型,但我们知道它是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/

10-11 16:36