如何在Java中将字段强制转换为集合类?

如何在Java中将字段强制转换为集合类?,java,reflection,Java,Reflection,如果字段是集合如何从集合(在本例中为字符串)确定泛型类型 我有一个确定泛型类型的方法: private boolean isSetTypeOf( Set<?> set, Class<?> clazz ) { for ( Object object : set ) { if ( object.getClass().equals( clazz ) ) { return true; }

如果字段是
集合
如何从
集合
(在本例中为
字符串
)确定泛型类型

我有一个确定泛型类型的方法:

private boolean isSetTypeOf( Set<?> set, Class<?> clazz )
{
    for ( Object object : set )
    {
        if ( object.getClass().equals( clazz ) )
        {
            return true;
        }
    }
    return false;
}

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

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

if ( isSetTypeOf( new HashSet().add(field), clazz ) )
而不是:

if ( isSetTypeOf( field, clazz ) )
这样做

if ( isSetTypeOf( new HashSet().add(field), clazz ) )
而不是:

if ( isSetTypeOf( field, clazz ) )

假设您已获得与类中的
集合
类型字段对应的相应
字段
类型,您可以使用以下代码查找参数化类型的类型:

对于
Set
type字段,这将输出:

Parameterized type for : java.util.Set<java.lang.String>
class java.lang.String
的参数化类型:java.util.Set
类java.lang.String

使用
isSetTypeOf
方法不会为您提供参数化类型,而是提供存储在
集合

中的元素的实际类型,前提是您在类中获得了与
集合
类型字段对应的相应
字段
类型,可以使用以下代码查找参数化类型的类型:

对于
Set
type字段,这将输出:

Parameterized type for : java.util.Set<java.lang.String>
class java.lang.String
的参数化类型:java.util.Set
类java.lang.String

使用
isSetTypeOf
方法不会给出参数化类型,但是
集合中存储的元素的实际类型当前只是检查集合中的任何元素是否为正确的类型。这不会告诉您关于其余元素的任何信息,也不会告诉您集合是否可以稍后更改。是否要检查类中泛型类型的参数化类型?目前您正在检查
集中存储的实际类型。对不起,我已经更新了帖子。Field是Field类型的(我使用的是反射)。您知道
Set
类型字段的变量名吗?我们可以假设,您得到了适当的字段吗?是的,字段是正确的。编译时出错。我不知道如何强制isSetTypeOf方法的字段为Set,因为他实际上是一个集合。您的方法目前只是检查集合中的任何元素是否是正确的类型。这不会告诉您关于其余元素的任何信息,也不会告诉您集合是否可以稍后更改。是否要检查类中泛型类型的参数化类型?目前您正在检查
集中存储的实际类型。对不起,我已经更新了帖子。Field是Field类型的(我使用的是反射)。您知道
Set
类型字段的变量名吗?我们可以假设,您得到了适当的字段吗?是的,字段是正确的。编译时出错。我不知道如何强制字段为isSetTypeOf方法的集合,因为他实际上是一个集合。很好。今天我学到了一些东西。这正是我想要的。谢谢,很好。今天我学到了一些东西。这正是我想要的。非常感谢。