我有一个包含各种变量的类
public class myClass{
public int id;
public String category;
public String description;
public String start;
public String end;
}
有没有办法通过创建内部函数或从调用对象检查变量是否存在?
例如检查 myClass 是否包含名为“category”的变量(确实如此)。或者它是否包含一个名为“foo”的类别(它没有)。
最佳答案
警告:接受的答案会起作用,但它依赖于异常作为控制流,即bad practice并且应尽可能避免。
请考虑以下替代方案:
public boolean doesObjectContainField(Object object, String fieldName) {
Class<?> objectClass = object.getClass();
for (Field field : objectClass.getFields()) {
if (field.getName().equals(fieldName)) {
return true;
}
}
return false;
}
或者使用 Java 8 流的更简洁的形式:
public boolean doesObjectContainField(Object object, String fieldName) {
return Arrays.stream(object.getClass().getFields())
.anyMatch(f -> f.getName().equals(fieldName));
}
这些代码片段不依赖异常作为控制流,实际上根本不需要任何异常处理,这将使您的实现更简单、更具可读性。您只需使用类似于以下的代码调用上述方法之一:
Object someObject = ... ;
boolean fieldExists = doesObjectContainField(someObject, "foo");
附带说明,如果您需要访问类的私有(private)字段(而不是父类字段),您可以简单地将对 getFields
的调用替换为 getDeclaredFields
.
关于java - 查看类中是否存在字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324991/