java - 查看类中是否存在字段

标签 java

我有一个包含各种变量的类

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/

相关文章:

java - 在资源 Controller 中使用多个服务的最佳方法是什么?

java - 将异常重新分配给 catch 参数

java - 继承,从子类调用方法

java - 从 String 安全地执行 Java 代码

java - 没有 anchor 不能使用菜单弹出助手

Java - 在元素随机化后恢复列表的原始顺序

java - 将字符串用户输入转换为数组

java - 任何了解 Streams、Buffer 及其在 Java 中的用法的教程?

java - 在 Jersey 请求中获取客户端语言环境

java - 来自 RESTful 的 Json