获取 Java 中所有实例变量的类型

Get types of all instance variables in Java

我有一个 class 命名属性,它有一些实例变量,如下所列:

public class Attributes {
   protected A variable1;
   protected B variable2;
   protected C variables3;
   
   /*
     Getters and Setters of each method.
  */
   
}

我想要 class 中存在的所有实例变量类型的列表。

输出:[A,B,C]

这包含此 class 中存在的所有可能的数据类型。

有人可以推荐一个方法吗?

注意:我见过反射,但我认为只有当我们填充了这些变量的值并且我们想要获取这些变量的值和名称而不是类型时它才有用。

您可以使用反射来访问 Field 然后获取它的类型:

参见:Field.getType() && Class.getDeclaredFields()

您可以使用 reflection 得到 type 这样的:

class Scratch {

    public static class Test {
        private int a;
        private long b;
    }

    public static void main(String[] args) {
        Field[] fields = Test.class.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println("Type: " + fields[i].getType());
        }
    }

}

输出:

Type: int
Type: long

您只需使用反射方法getType() 即可。为了获得所有实例类型的列表,它很简单:

Arrays.stream(Attributes.class.getDeclaredFields()).map(Field::getType).collect(Collectors.toList())

其中 getFields() 将 return class 中所有字段的数组(而不是它的实例,您引用的是 class 而不是实例class)。 map() 部分会将字段映射到它的 class 类型。 而 collect(Collectors.toList()) 只会将 Class 类型的流结果获取到列表中。如果您不想只使用单个 class 类型,那么没有重复项只需使用 toSet() 即可。