gpt4 book ai didi

java - 如何检测是否只设置了部分属性?

转载 作者:行者123 更新时间:2023-12-01 12:21:30 25 4
gpt4 key购买 nike

String a = "1";
String b;
...
String n = "100";

如何检查是否未设置或所有属性均已设置?

如果设置了所有属性,我希望获得“有效”,如果没有设置,我也希望获得“有效”。但如果仅部分设置,则“无效”。

如何解决这个问题?当然,我可以编写无尽的 boolean 语句,例如

(a != null && b != null & .. & n != null) || (a == null && b == null & .. & n == null)

但是一定有更好的方法。

最佳答案

有一个示例类

public class SampleClass {    

private String a, b, c, d, e, f;

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}

public String getC() {
return c;
}

public void setC(String c) {
this.c = c;
}

public String getD() {
return d;
}

public void setD(String d) {
this.d = d;
}

public String getE() {
return e;
}

public void setE(String e) {
this.e = e;
}

public String getF() {
return f;
}

public void setF(String f) {
this.f = f;
}

}

您可以使用java.beans.Introspector获取Java Bean信息

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;

import org.junit.Test;

public class IntrospectorTest {

@Test
public void test() throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {

SampleClass sampleClass = new SampleClass();

sampleClass.setA("value for a");
sampleClass.setB("value for b");
sampleClass.setC("value for c");
sampleClass.setD("value for d");
sampleClass.setE("value for e");
sampleClass.setF("value for f");

int withValue = 0;

PropertyDescriptor[] descriptors = Introspector.getBeanInfo(SampleClass.class, Object.class).getPropertyDescriptors();

for (PropertyDescriptor propertyDescriptor : descriptors) {
Object value = new PropertyDescriptor(propertyDescriptor.getName(), SampleClass.class).getReadMethod().invoke(sampleClass);
if (value!=null) {
withValue++;
System.out.println(propertyDescriptor.getName() + ": " + value);
}
}

if (descriptors.length == withValue || withValue == 0) {
System.out.println("valid");
}else{
System.err.println("Invalid!!");
}
}
}

瞧!

注意这一行

Introspector.getBeanInfo(SampleClass.class, Object.class).getPropertyDescriptors();

如果您将类作为一个参数调用 getBeanInfo 方法,则 Introspector 将返回类层次结构中的所有属性描述符,因此您可以调用该方法使用可选的停止类,Introspector 停止读取属性描述符。

希望这有帮助。

关于java - 如何检测是否只设置了部分属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26634138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com