考虑这两段代码(您可以假设execeptionObj它是类型Object,但我们知道它是一个实例Throwable):
1)
logger.log(Level.ERROR, (Throwable) exceptionObj,
((Throwable) exceptionObj).getMessage());
Run Code Online (Sandbox Code Playgroud)
2)
Throwable t = new Throwable((Throwable)exceptionObj);
logger.log(Level.ERROR, t, t.getMessage());
Run Code Online (Sandbox Code Playgroud)
在我正在进行的项目的代码审查期间,一位评论者说第一种方式不如第二种方式有效,因为它涉及2次演员.我只是想知道你的想法.似乎创建一个新实例也会涉及一些开销.
Sea*_*wen 12
这两段代码做了不同的事情.在第二个中,您不再传递exceptionObj,而是"由exceptionObj引起的未指定的Throwable".我不认为这就是你想要的.
你的意思是第二行的第一行是:
Throwable t = (Throwable) exceptionObj;
Run Code Online (Sandbox Code Playgroud)
我猜,它的效率非常高,但不会让这个决定问题.哪个更易读是关键,我认为(修改过的)第二个更具可读性.
你真的需要托付给Throwable吗?肯定记录器已经使用了Throwable吗?