String a = "1";
String b;
...
String n = "100";
如何检查是否已设置所有属性?
我想得到"有效"如果a..n设置了所有属性,并且"有效"如果没有设置则没有。但是"无效"如果只是部分设置。
如何解决这个问题?当然,我可以编写无穷无尽的布尔语句,如
(a != null && b != null & .. & n != null) || (a == null && b == null & .. & n == null)
但必须有更好的方法。
答案 0 :(得分:1)
有一个样本类
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
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
停止阅读属性描述符。
希望这有帮助。
答案 1 :(得分:0)
您可以使用map然后迭代它来检查是否有任何值为null并相应地设置状态。
你也可以试试这个:Collections.frequency(map.values(),null)== map.size()