为什么Java教程明确地构造布尔值?

时间:2009-09-28 14:23:33

标签: java

例如,

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
   new Boolean(true));

JAXB Tutorial

5 个答案:

答案 0 :(得分:3)

我认为没有特别的理由。这是非常糟糕的做法,IMO。 Boolean.TRUE和Boolean.FALSE做你需​​要的一切。

答案 1 :(得分:1)

如今,通过自动装箱,您可以编写true,如果需要new Boolean(true)对象(而不是Boolean原语),它将自动转换为boolean

但是,在Java 1.4及更早版本中,这是不可能的;一个人必须明确地创建Boolean对象。您链接的教程是2003年,当时还没有发布Java 5.0(a.k.a. Java 1.5)。

但即便如此,正如Malaxeur所说,使用Boolean.TRUE会更好。

答案 2 :(得分:0)

这实际上非常奇怪,因为布尔的Javadoc明确表明它通常不是一个好主意http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html。也许这个教程有点老了?

  

构造函数详细信息布尔

     

public Boolean(boolean value)

Allocates a Boolean object representing the value argument.

Note: It is rarely appropriate to use this constructor. Unless a new
     

实例是必需的,静态的   factory valueOf(boolean)一般   一个更好的选择。它可能会屈服   明显更好的空间和时间   性能

Parameters:
    value - the value of the Boolean

答案 3 :(得分:0)

大多数情况下,当您需要布尔对象时,您需要引用类型的功能。方法可能需要一个对象,因此您传递一个布尔值。但可能最重要的是布尔值可以为null以及true和false。假设您有一个布尔事务成功的银行,如果是,则为true,否则为false。但如果交易没有发生怎么办?您可以将其设置为false,但由于它不能准确描述数据,因此会令人困惑。

这种情况下布尔值派上用场,但绝对不意味着它总是正确的选择。 :d

答案 4 :(得分:0)

从技术上讲,正如Malaxeur和Thomas所说,不应该使用Boolean(boolean value)构造函数,而是使用Boolean.TRUEBoolean.FALSE。自版本1.4.2以来,甚至在JavaDoc中都记录了这一点,尽管Boolean.TRUEBoolean.FALSE对象与jdk 1.0.1一样旧

我不相信,JAXB需要属性值的唯一实例。如果这种情况不太可能发生,则会明确警告使用Boolean.TRUE

我看到的唯一原因是:这是一个教程,代码在可读性方面得到了改进。如果显示“new Boolean(true)”,则很明显,创建了一个新的布尔实例。从技术上说,“Boolean.TRUE”可以是任何类型的,因此乍一看并不清楚,此方法中需要一个布尔对象。