我有一个班级
Class Test{
private String something ;
private String somethingElse;
private String somethingMore;
}
我正在创建一个这样的实例。
myInst = new Test();
并将值添加到第一个和第二个变量。
现在我需要检查是否有任何变量为空。
我知道我可以像if(myInst.something == null)
但是对于我添加到课堂上的每个项目来说,这很难做到。
无论如何,我可以通过循环遍历所有元素并查看任何内容为空来检查实例。
就像 -
for(i=0; i< myInstanceVariables ; i++)
{
if(myInstanceVariable == null ){
//do something
donotDisplay(myInstanceVariable)
}
TIA
答案 0 :(得分:2)
您可以使用实例中的Fields
使用反射。在您的课程中,添加此代码。它将占用所有领域并获得它们的价值。
Field[] fields = getClass().getDeclaredFields(); // get all the fields from your class.
for (Field f : fields) { // iterate over each field...
try {
if (f.get(this) == null) { // evaluate field value.
// Field is null
}
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
以下是示例代码:https://ideone.com/58jSia
答案 1 :(得分:0)
你必须在类的字段上使用反射。
myInst = new Test();
for (Field field : myInst.getClass().getDeclaredFields())
if (field.get(myInst) == null)
// do something
答案 2 :(得分:0)
您可以使用反射,但是,在您的情况下,您只有String值,因此使用HashMap(例如)也是有意义的:
HashMap hm = new HashMap();
hm.put("something", "itsValue");
hm.put("somethingElse", null);
现在您可以根据需要添加任意数量的值,并按照以下方式迭代它们:
Set set = hm.entrySet();
Iterator i = set.iterator();
while(i.hasNext()){
Map.Entry me = (Map.Entry)i.next();
System.out.println(me.getKey() + " : " + me.getValue() );
}