2

如果一个字段是一个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
    }
}

基本上我知道字段类型是一个集合,现在我需要知道集合包含的对象的类型,然后才使用该字段。

4

3 回答 3

2

假设你已经在你的类中获得了Field与你的 type 字段对应的适当类型Set,你可以使用以下代码找出Parameterized Type的类型:

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.

于 2013-08-10T07:54:18.217 回答
1

试试这个object.getClass().isAssignableFrom(clazz)

于 2013-08-10T07:38:42.893 回答
1

做这个

if ( isSetTypeOf( new HashSet().add(field), clazz ) )

代替:

if ( isSetTypeOf( field, clazz ) )
于 2013-08-10T07:41:26.170 回答