类的集合

5

是否可以创建一个不同类类型的集合,以便稍后检查对象是否是集合中任何一个类的对象?就像这样:

for(Class c: collectionOfClasses){
    if(o.getClass() == c){
        //do something
    }
}

这里的o是某个对象。我通过使用以下代码进行了测试:

private LinkedList<Class> collectionOfClasses...

Eclipse提示:“Class is a raw type.References to generic type Class should be parameterized.”有安全的方法可以实现我的意图吗? 编辑#1 实际上,我有不同类的对象(不形成层次结构),在移动。它们都有一定的半径。只有当其他对象属于其已知类之一时,特定对象才能与其半径内的其他对象连接。我表达清楚了吗? 编辑#2 我想要做的一个很好的例子: 假设我会说英语和法语。但我能认出周围的不同人类。假设我看到10个人靠近我。然后我会尝试测试p1.getClass()是否是英语或法语,p2.getClass()是否是英语或法语。检查完我周围的所有人之后,我会和那些懂得英语或法语的人交谈。

1
你尝试过使用 LinkedList<Class<?>> 吗? - Dr1Ku
3
你正在尝试做的事情让我感到不安,你可能采用了错误的方法。如果你能解释一下这个样本的用途,可能会有改进建议。 - Vinko Vrsalovic
1
我会使用 if (o.getclass instanceof SomeClass) 而不是使用 == c。 - JPM
1
@JPM 你的意思是使用 c.isInstance(object) - Marcelo
1
@aps:现在的标准是什么?一个类的类型。你可以轻松地将这个标准转换为一些结构或映射,所有的类都知道、共享和查询。 - Vinko Vrsalovic
显示剩余5条评论
4个回答

10

您可以使用:

private LinkedList<Class <?>> collectionOfClasses...

如果您有更具体的问题,可以尝试以下方法:

private LinkedList<Class <? extends MyInterface>> collectionOfClasses...

3
您可以使用ArrayList<Class<?>>
例如:
List<Class<?>> list = new ArrayList<Class<?>>();
list.add(String.class);
list.add(x.getClass());

1

类是泛型; 如果你想要“任何”种类的类,你可以使用通配符“?”:

List<Class<?>> theList = ...

0

不必要使用for循环。直接写更短

if(collectionOfClasses.contains(o.getClass())) {
    //do something
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接