基本的に、オブジェクトがnullか空かを確認するにはどうすればよいですか。つまり、オブジェクトをインスタンス化したが、そのすべての値またはフィールドがnullの場合、コードが空かどうかをチェックインするにはどうすればよいですか?
私が試してみました;
if (doc != null){
.... do something
しかし、それは機能していないようです。
基本的に、オブジェクトがnullか空かを確認するにはどうすればよいですか。つまり、オブジェクトをインスタンス化したが、そのすべての値またはフィールドがnullの場合、コードが空かどうかをチェックインするにはどうすればよいですか?
私が試してみました;
if (doc != null){
.... do something
しかし、それは機能していないようです。
直接行うことはできません。これを確認する独自の方法を提供する必要があります。例えば。
class MyClass {
Object attr1, attr2, attr3;
public boolean isValid() {
return attr1 != null && attr2 != null && attr3 != null;
}
}
または、すべてのフィールドをfinalにしてコンストラクターで初期化すると、すべてが確実に初期化されます。
import org.apache.commons.lang3.ObjectUtils;
if(ObjectUtils.isEmpty(yourObject)){
//your block here
}
これは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;
}
に対して確認する必要がありnull
ます。
オブジェクトxがnullかどうかを確認する場合は、次の操作を実行できます。
if(x != null)
ただし、nullでない場合は、nullまたは空のプロパティを持つことができます。それらを明示的に確認します。
if(x.getProperty() != null)
「空の」チェックの場合、関係するタイプによって異なります。JavaString
の場合、通常は次のようにします。
if(str != null && !str.isEmpty())
これに関する特定の問題については言及していないので、わかりにくいです。
別のオーバーロードされたメソッドを追加して、プロジェクトの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()メソッドをすべてのオブジェクトに含める必要があります。
オブジェクトにオブジェクトが含まれている場合は、それらがnullであるかどうかを確認し、プリミティブがある場合は、デフォルト値を確認します。
例えば:
Person Object
name Property with getter and setter
to check if name is not initialized.
Person p = new Person();
if(p.getName()!=null)
私には方法があります、皆さんはそれがどれほど良いかを教えてくれます。
クラスの新しいオブジェクトを作成し、それをオブジェクト(空であることを確認する)と比較します。
正しくそれを行うことができるようにするには:
モデルクラスおよびクラスの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条件を設定するのではなく、これが最善の方法であることを願っています。
お知らせ下さい !
単純な場合(私のプロジェクトで機能しました)。一部のフィールドで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値なし
としましょう、
data = {};
if( if(!$.isEmptyObject(data)))
{
document.write("Object is empty);
}
else{
document.write("Object is not empty);
}
それは私のために働き、オブジェクトが空であるかどうかをチェックする簡単な方法です