Java最佳实践:在仅接受基本类型参​​数的调用中使用doubleValue()

时间:2015-08-16 08:57:06

标签: java

来自Effective Java - Joshua Bloch

第49项 - 将原始类型选择为盒装基元

  

只要有盒子基元,就优先使用基元   选择。原始类型简单快捷。如果你必须使用盒装   原始人,小心! Autoboxing减少了冗长,但不是   危险,使用盒装基元

当我需要一个总是返回一个原始值的方法时,该原始值是用它们的参数计算的,它们的参数可以来自Double对象,

我更喜欢编写代码:

public double someCalculation(double primitiveDouble, double anotherPrimitiveDouble) {
        return primitiveDouble + anotherPrimitiveDouble;
}

代替:

public double someCalculation(Double doubleObject, double doublePrimitive) {
    if (doubleObject!= null) {
        return doubleObject+ doublePrimitive;
    }
    return 0d;
}

在调用者中,我对null和doubleValue()在盒装原语doubleObject中的调用进行了验证,如:

public void someCaller() {
    double doublePrimitive = getSomeDoublePrimitive();    
    Double doubleObject = getSomeDoubleObject();

     if (doubleObject != null) {
            double result = someCalculation(doubleObject.doubleValue(), doublePrimitive)
    } 
 .....
}

代替:

public void someCaller() {
    double doublePrimitive = getSomeDoublePrimitive();    
    Double doubleObject = getSomeDoubleObject();

     if (doubleObject != null) {
            double result = someCalculation(doubleObject, doublePrimitive)
    } 
 .....
}

当我调用方法someCalculation(double primitiveDouble, double anotherPrimitiveDouble)时,我使用Double参数doubleValue()中的doubleObject调用doubleObject.doubleValue()来明确取消doubleObject的双原语值。

通过这种方式:

  • 我确信我的方法得到一个原始的double而不是Double对象。

  • 如果调用者中的null验证消失了,我会更接近堆栈跟踪中最终NullPointerException的位置。

  • 我相信我提高了代码的可读性,因为我更清楚我的意图。

  • 我将准确的参数传递给只需要原始类型的方法someCalculation(double primitiveDouble, double anotherPrimitiveDouble)

我的问题:

使用显式拆箱有什么优点/缺点?

当我调用一些只接受基本类型参​​数为doubleObject.doubleValue()的方法时,可以使用someCalculation(double primitiveDouble, double anotherPrimitiveDouble)吗?

0 个答案:

没有答案