34

基本的に、オブジェクトがnullか空かを確認するにはどうすればよいですか。つまり、オブジェクトをインスタンス化したが、そのすべての値またはフィールドがnullの場合、コードが空かどうかをチェックインするにはどうすればよいですか?

私が試してみました;

if (doc != null){
.... do something

しかし、それは機能していないようです。

4

9 に答える 9

38

直接行うことはできません。これを確認する独自の方法を提供する必要があります。例えば。

class MyClass {
  Object attr1, attr2, attr3;

  public boolean isValid() {
    return attr1 != null && attr2 != null && attr3 != null;
  }
}

または、すべてのフィールドをfinalにしてコンストラクターで初期化すると、すべてが確実に初期化されます。

于 2013-01-22T16:29:27.403 に答える
9
import org.apache.commons.lang3.ObjectUtils;
if(ObjectUtils.isEmpty(yourObject)){
  //your block here
}
于 2019-08-12T07:27:46.900 に答える
7

これはJavaリフレクションで行うことができます。このメソッドは、オブジェクトに1つの属性値が存在する場合、falseを返します。

public boolean isEmpty()  {

    for (Field field : this.getClass().getDeclaredFields()) {
        try {
            field.setAccessible(true);
            if (field.get(this)!=null) {
                return false;
            }
        } catch (Exception e) {
          System.out.println("Exception occured in processing");
        }
    }
    return true;
}
于 2019-01-22T05:39:00.567 に答える
3

に対して確認する必要がありnullます。

オブジェクトxがnullかどうかを確認する場合は、次の操作を実行できます。

    if(x != null)

ただし、nullでない場合は、nullまたは空のプロパティを持つことができます。それらを明示的に確認します。

    if(x.getProperty() != null)

「空の」チェックの場合、関係するタイプによって異なります。JavaStringの場合、通常は次のようにします。

    if(str != null && !str.isEmpty())

これに関する特定の問題については言及していないので、わかりにくいです。

于 2013-01-22T16:29:07.483 に答える
3

別のオーバーロードされたメソッドを追加して、プロジェクトのUtility/Utilitiesクラスに追加することをお勧めします。

コレクションをチェックするには、空またはnullである

public static boolean isEmpty(Collection obj) {
    return obj == null || obj.isEmpty();
}

またはApacheCommonsを使用しますCollectionUtils.isEmpty()

マップが空かnullかを確認するには

public static boolean isEmpty(Map<?, ?> value) {
    return value == null || value.isEmpty();
}

またはApacheCommonsを使用しますMapUtils.isEmpty()

文字列が空またはnullかどうかを確認するには

public static boolean isEmpty(String string) {
    return string == null || string.trim().isEmpty();
}

またはApacheCommonsを使用しますStringUtils.isBlank()

オブジェクトがnullであることを確認するのは簡単ですが、オブジェクトには多くのプライベート変数または継承された変数とネストされたオブジェクトがあり、それらはすべて空である必要があるため、オブジェクトが空かどうかを確認するのは難しいです。そのためには、すべてを検証する必要があります。または、オブジェクトの空性を検証するisEmpty()メソッドをすべてのオブジェクトに含める必要があります。

于 2017-05-30T15:52:10.863 に答える
0

オブジェクトにオブジェクトが含まれている場合は、それらがnullであるかどうかを確認し、プリミティブがある場合は、デフォルト値を確認します。

例えば:

Person Object 
name Property with getter and setter

to check if name is not initialized. 

Person p = new Person();
if(p.getName()!=null)
于 2013-01-22T16:29:46.640 に答える
0

私には方法があります、皆さんはそれがどれほど良いかを教えてくれます。

クラスの新しいオブジェクトを作成し、それをオブジェクト(空であることを確認する)と比較します。

正しくそれを行うことができるようにするには:

モデルクラスおよびクラスのhashCode()メソッドとequals()メソッドをオーバーライドします。これらのオブジェクトのオブジェクトは、クラスのメンバーです。次に例を示します。

人物クラス(プライマリモデルクラス):

public class Person {

    private int age;
    private String firstName;
    private String lastName;
    private Address address;

    //getters and setters

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((address == null) ? 0 : address.hashCode());
        result = prime * result + age;
        result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
        result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (address == null) {
            if (other.address != null)
                return false;
        } else if (!address.equals(other.address))
            return false;
        if (age != other.age)
            return false;
        if (firstName == null) {
            if (other.firstName != null)
                return false;
        } else if (!firstName.equals(other.firstName))
            return false;
        if (lastName == null) {
            if (other.lastName != null)
                return false;
        } else if (!lastName.equals(other.lastName))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Person [age=" + age + ", firstName=" + firstName + ", lastName=" + lastName + ", address=" + address
                + "]";
    }

}

アドレスクラス(Personクラス内で使用):

public class Address {

    private String line1;
    private String line2;

    //getters and setters

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((line1 == null) ? 0 : line1.hashCode());
        result = prime * result + ((line2 == null) ? 0 : line2.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Address other = (Address) obj;
        if (line1 == null) {
            if (other.line1 != null)
                return false;
        } else if (!line1.equals(other.line1))
            return false;
        if (line2 == null) {
            if (other.line2 != null)
                return false;
        } else if (!line2.equals(other.line2))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Address [line1=" + line1 + ", line2=" + line2 + "]";
    }

}

今メインクラスに:

    Person person1 = new Person();
    person1.setAge(20);

    Person person2 = new Person();

    Person person3 = new Person();

if(person1.equals(person2)) --> this will be false

if(person2.equals(person3)) --> this will be true

すべてのメンバー変数にif条件を設定するのではなく、これが最善の方法であることを願っています。

お知らせ下さい !

于 2019-10-23T18:30:24.947 に答える
0

単純な場合(私のプロジェクトで機能しました)。一部のフィールドでnullチェックが必須ではない場合は、上記のコードのようにtoString()メソッドから除外し、学校を削除しました。

public class Student {
    private String name;
    private String school;
    private Integer roll;
    private String section;
    //getters and setters

    @Override
    public String toString() {
        return "Student [name=" + name + ", roll=" + roll + ", section=" + section + "]";
    }

}


public class StudentRunner {
    
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("ved");
        s.setRoll(12);
        s.setSection("A");
        s.setSchool(null);//school set null and it removed from toString() method
        if(s.toString().contains("null")) {
            System.out.println("null value contains");
            //do your work here or throw exception
        } else {
            System.out.println("no null value");
        }
    }

}

出力:null値なし

于 2021-12-21T15:15:28.393 に答える
-2

としましょう、

data = {};

if( if(!$.isEmptyObject(data)))
{
     document.write("Object is empty);
}

else{
    document.write("Object is not empty);
}

それは私のために働き、オブジェクトが空であるかどうかをチェックする簡単な方法です

于 2019-04-17T12:03:19.470 に答える