使用反射查找String,Boolean,Integer类型的字段

时间:2011-02-28 22:11:40

标签: java

有没有办法在类中找到类型为

的字段
    java.lang.Character.TYPE
    java.lang.Byte.TYPE
    java.lang.Short.TYPE
    java.lang.Integer.TYPE
    java.lang.Long.TYPE
    java.lang.Float.TYPE
    java.lang.Double.TYPE

有char,byte,short等的isPrimitive方法。

3 个答案:

答案 0 :(得分:6)

您可以从Class#getDeclaredFields()开始,获取班级中的一系列字段。然后,迭代数组中的每个Field并根据需要进行过滤。

像这样:

public static List<Field> getPrimitiveFields(Class<?> clazz)
{
    List<Field> toReturn = new ArrayList<Field>();

    Field[] allFields = clazz.getDeclaredFields();

    for (Field f : allFields)
    {
        Class<?> type = f.getType();
        if (type.isPrimitive())
        {
            toReturn.add(f);
        }
    }

    return toReturn;
}

更多信息:


修改

值得澄清的是,java.lang.Character.TYPE等类型与类文字相同。也就是说,

  • java.lang.Character.TYPE == char.class
  • java.lang.Byte.TYPE == byte.class
  • java.lang.Short.TYPE == short.class
  • java.lang.Integer.TYPE == int.class
  • java.lang.Long.TYPE == long.class
  • java.lang.Float.TYPE == float.class
  • java.lang.Double.TYPE == double.class

答案 1 :(得分:0)

这些类型都是原语,因此请使用isPrimitive()。

答案 2 :(得分:0)

我正在寻找一种对包装类型返回true的方法。 Springs ClassUtils提供了一种这样的方法

ClassUtils.isPrimitiveOrWrapper(field.getType()) 
对于我请求的所有上述内容,

返回true,但String

除外