Коллекция классов - PullRequest
       1

Коллекция классов

4 голосов
/ 06 июля 2011

Можно ли создать коллекцию разных типов классов, чтобы впоследствии можно было проверить объект, чтобы определить, является ли он объектом какого-либо из этих классов в коллекции? что-то вроде:

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

Здесь o - некоторый объект. Я попробовал это с помощью:

private LinkedList<Class> collectionOfClasses...

Eclipse выдает предупреждение «Класс является необработанным типом. Ссылки на универсальный тип должны быть параметризованы». Любой безопасный способ сделать то, что я хочу сделать?

РЕДАКТИРОВАТЬ # 1

На самом деле, у меня есть объекты разных классов (которые не образуют иерархию), которые перемещаются. Все они имеют определенный радиус. Определенный объект может соединяться с другими объектами в своем радиусе, только если другой объект попадает в один из его известных классов. Могу ли я сделать это ясно?

РЕДАКТИРОВАТЬ # 2

Хороший пример того, что я хочу сделать: Допустим, я говорю по-английски и по-французски. Но я могу идентифицировать разных людей вокруг меня. Допустим, я вижу 10 человек рядом со мной. Затем я попытаюсь проверить, является ли p1.getClass () английским или французским, p2.getClass () английским или французским. После осмотра всех людей вокруг меня я поговорю с теми, кто понимает по-английски или по-французски.

Ответы [ 4 ]

8 голосов
/ 06 июля 2011

Вы можете использовать:

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

А если у вас есть что-то более конкретное, вы можете попробовать:

private LinkedList<Class <? extends MyInterface>> collectionOfClasses...
2 голосов
/ 06 июля 2011

Вы можете использовать ArrayList<Class<?>>.

Например:

List<Class<?>> list = new ArrayList<Class<?>>();
list.add(String.class);
list.add(x.getClass());
1 голос
/ 06 июля 2011

Класс является универсальным типом ; чтобы сказать, что вы хотите «любой» класс, вы должны использовать подстановочный знак «?»:

List<Class<?>> theList = ...
0 голосов
/ 06 июля 2011

Цикл for не требуется. Короче просто написать

if(collectionOfClasses.contains(o.getClass())) {
    //do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...