基本上你如何检查一个对象是空的还是空的。我的意思是,如果我实例化了一个对象,但它的所有值或字段都是空的,如果它是空的,我该如何签入代码?
我努力了;
if (doc != null){
.... do something
但这似乎不起作用。
基本上你如何检查一个对象是空的还是空的。我的意思是,如果我实例化了一个对象,但它的所有值或字段都是空的,如果它是空的,我该如何签入代码?
我努力了;
if (doc != null){
.... do something
但这似乎不起作用。
你不能直接这样做,你应该提供你自己的方式来检查它。例如。
class MyClass {
Object attr1, attr2, attr3;
public boolean isValid() {
return attr1 != null && attr2 != null && attr3 != null;
}
}
或者将所有字段设置为最终字段并在构造函数中对其进行初始化,以便您可以确保所有内容都已初始化。
import org.apache.commons.lang3.ObjectUtils;
if(ObjectUtils.isEmpty(yourObject)){
//your block here
}
这可以通过java反射来完成,如果对象存在任何一个属性值,此方法返回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 是否为空,可以执行以下操作:
if(x != null)
但如果它不为 null,则它可以具有为 null 或为空的属性。您将明确检查这些:
if(x.getProperty() != null)
对于“空”检查,这取决于所涉及的类型。对于 Java String
,您通常会这样做:
if(str != null && !str.isEmpty())
由于您没有提到任何具体问题,因此很难说。
我建议您添加单独的重载方法并将它们添加到您的项目实用程序/实用程序类中。
检查 Collection 是否为空或 null
public static boolean isEmpty(Collection obj) {
return obj == null || obj.isEmpty();
}
或使用 Apache CommonsCollectionUtils.isEmpty()
检查 Map 是否为空或 null
public static boolean isEmpty(Map<?, ?> value) {
return value == null || value.isEmpty();
}
或使用 Apache CommonsMapUtils.isEmpty()
检查字符串是否为空或 null
public static boolean isEmpty(String string) {
return string == null || string.trim().isEmpty();
}
或使用 Apache CommonsStringUtils.isBlank()
检查一个对象是否为空很容易,但验证它是否为空却很棘手,因为对象可以有许多私有或继承的变量和嵌套对象,这些都应该是空的。为此,需要验证所有内容,或者在所有对象中使用一些 isEmpty() 方法来验证对象是否为空。
如果您的对象包含对象,则检查它们是否为空,如果它有原语检查它们的默认值。
例如:
Person Object
name Property with getter and setter
to check if name is not initialized.
Person p = new Person();
if(p.getName()!=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");
}
}
}
输出:没有空值
我有办法,你们告诉我有多好。
创建该类的新对象并将其与您的对象(您要检查是否为空)进行比较。
为了能够正确地做到这一点:
覆盖模型类以及类的 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 条件。
让我知道 !
假设,
data = {};
if( if(!$.isEmptyObject(data)))
{
document.write("Object is empty);
}
else{
document.write("Object is not empty);
}
它对我有用,它是一种检查对象是否为空的简单方法