有没有办法在类中找到类型为
的字段 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方法。
答案 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;
}
Field#getType()
Class#isPrimitive()
(虽然听起来你已经知道了这个)值得澄清的是,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
除外