如果字段为Set<String>
,如何确定Set
(在这种情况下为String
)的通用类型?
我有这个方法来确定泛型类型:
private boolean isSetTypeOf( Set<?> set, Class<?> clazz )
{
for ( Object object : set )
{
if ( object.getClass().equals( clazz ) )
{
return true;
}
}
return false;
}
但我不能将Field转换为Set,因此无法使用此方法。
Field field = getTheField();
if ( ReflectionUtils.isType( field, Set.class )
{
// Error
if ( isSetTypeOf( field, clazz ) )
{
// do something
}
}
基本上我知道字段类型是一个Set,现在我需要知道集合所持有的对象的类型,然后才会使用该字段。
答案 0 :(得分:2)
假设您的类中有Field
类型字段对应的Set
类型,您可以使用以下代码找出参数化类型:
Type type = field.getGenericType(); // Get the generic type of the Field,
if (type instanceof ParameterizedType) {
System.out.println("Parameterized type for : " + type);
ParameterizedType pType = (ParameterizedType) type;
Type[] types = pType.getActualTypeArguments();
for (Type aType: types) {
System.out.println(aType);
}
}
对于Set<String>
类型字段,将输出:
Parameterized type for : java.util.Set<java.lang.String>
class java.lang.String
使用isSetTypeOf
方法不会为您提供参数化类型,而是Set
中存储的元素的实际类型。
答案 1 :(得分:1)
试试这个object.getClass().isAssignableFrom(clazz)
答案 2 :(得分:1)
这样做
if ( isSetTypeOf( new HashSet().add(field), clazz ) )
而不是:
if ( isSetTypeOf( field, clazz ) )