2

我有一个如图所示的课程

package com;

public class Person {
boolean registered;

public boolean isRegistered() {
    return registered;
}

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

个人对象的数据将根据 DB 中存在的数据进行设置。问题是,对于较旧的记录,已注册的文件不存在。

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

包com;

public class Test {

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

        if (per.isRegistered()) {

        }
    }

}

我如何检查该 Person 对象的 per.isRegistered() 字段是否存在?

4

10 回答 10

6

你的Person类当前定义的方式,你不能,因为boolean(原始类型)没有null值,只有trueand false

可以使用Boolean(对象等价物),它可以是nullBoolean.TRUEBoolean.FALSE.

但是您更有可能希望在更深层次上解决这个问题。您说过您的数据库中有数据,但该字段不存在。这些记录是否被视为已注册?你的班级应该反映这个问题的答案。

于 2013-03-04T11:32:23.107 回答
5

boolean是原始数据类型,不能为空,只能为真或假。但是Boolean对象是布尔数据类型的说唱歌手,它可以是 null 和Boolean.TRUEand Boolean.FALSE;

public class Person {
    Boolean registered;
    ...
}

...

Person per = new Person();

if (per.isRegistered()!=null ) {
    if(!per.isRegistered()){
         ...
    }else{
         ...
    }
}
于 2013-03-04T11:33:27.430 回答
3

boolean 不能null;_ 您需要使用 (Boolean)或构造一个复合类型。

于 2013-03-04T11:32:40.367 回答
1

您可以使用Boolean(大写 B)类,它允许NULL为此类引用提供值。

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

于 2013-03-04T11:33:06.773 回答
1

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

您可以通过使用 Boolean 类而不是原始 boolean 并使用 null 作为“不存在”指示符来实现这一点。

于 2013-03-04T11:33:19.850 回答
1

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

于 2013-03-04T11:34:45.480 回答
1

你应该使用可选

if (Optional.ofNullable(per.isRegistered()).orElse(false)) {
  // ...
}
于 2017-12-04T09:38:23.330 回答
0

boolean registered作为字段,默认情况下为 false。此外,与类boolean无关,Object但与原始值无关,所以根本不可能null

只有一个空指针,你可能会在这里它是什么per时候null

于 2013-03-04T11:34:14.320 回答
0

使列可为空并使用布尔值而不是布尔值。不过,对于具体问题,我认为您可以假设如果它为 null 则用户未注册。

于 2013-03-04T11:34:17.423 回答
0

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

于 2013-03-04T11:34:39.567 回答