2013-03-04 64 views
2

有类如我如何检查空条件的布尔变量

package com; 

public class Person { 
boolean registered; 

public boolean isRegistered() { 
    return registered; 
} 

public void setRegistered(boolean registered) { 
    this.registered = registered; 
} 
} 

数据,以Person对象将根据数据存在于数据库进行设置。 问题是,对于较旧的记录,注册的字段不存在。

所以我如何测试如果提交的是否存在?

package com;

public class Test { 

    public static void main(String args[]) { 
     Person per = new Person(); 

     if (per.isRegistered()) { 

     } 
    } 

} 

我该如何检查per.isRegistered()字段是否存在或不是该人物对象?

+0

你总是可以只注册布尔值默认为false,因为如果该字段没有设置,你可以假定它没有登记。 – Supericy 2013-03-04 11:35:31

回答

5

boolean是原始数据类型,不能为null,只能是true或false。但是Boolean作为布尔数据类型的说唱者的对象,可能是空的,并且Boolean.TRUEBoolean.FALSE;

public class Person { 
    Boolean registered; 
    ... 
} 

...

Person per = new Person(); 

if (per.isRegistered()!=null) { 
    if(!per.isRegistered()){ 
     ... 
    }else{ 
     ... 
    } 
} 
6

Person类目前被定义,你不能,因为boolean(基本类型)没有null价值,只有truefalse的方式。

可能使用Boolean(对象当量),可以是nullBoolean.TRUE,或Boolean.FALSE

但更有可能你想在更深层次上解决这个问题。你说过你的数据库中有这个字段不存在的数据。这些记录是否被考虑登记?你的班级应该反映这个问题的答案。

+1

它通常在实践中发生的方式,答案是依赖于上下文的,而不是该类的属性。业务逻辑通常最好用代码和数据的清晰分离来完成。 – 2013-03-04 11:38:07

3

boolean不能null;你需要使用(Boolean)或构建一个复合型。

1

可以使用Boolean(大写B)类,允许NULL值同类引用。

或者,您也可以使用enum有。三个可能的值:NOT_AVAILABLEYESNO这有一个更清晰的语义,并允许您在以后添加其他可能的值(如果需要)

1

你需要一个三个态布尔;真,假不存在

您可以通过使用布尔类而不是原始布尔值来实现此目的,并使用null作为“不存在”指示符。

0

boolean registered的领域它默认为false。此外booleanObject类没有关系,但原始值,所以根本不能是null

只有一个空指针你可能会在这里它的时候pernull

0

使列可空,并使用布尔而不是布尔的。对于具体的问题,我认为你可以假设如果它是空的用户没有注册。

0

您必须扩展person类才能在测试类中使用它。 您还必须定义布尔值。

1

我真的不明白你的想法。但是如果你想处理一个布尔值,它的值可以是下列值之一{true/false/null},你应该使用一个Boolean对象,它是一个简单的boolean包装器,但是它可以取值null值(因为每个Java对象都可以被设置为空)。

0

您应该使用Optional

if (Optional.ofNullable(per.isRegistered()).orElse(false)) { 
    // ... 
}