Как передать тип класса в качестве параметра функции? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть четыре класса: A, B, C, D. B, C, D расширяет A. У меня есть список - List<A>, который содержит все виды объектов, и я хочу построить функцию который получает один из классов в качестве параметра и выводит из списка все объекты, принадлежащие этому классу.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020
    public static void printElements(List<A> list, Class<? extends A> type) {
        for (A element : list) {
            if (type.isAssignableFrom(element.getClass())) {
                System.out.println(element);
            }
        }
    }

Метод isAssignableFrom можно использовать для определения, является ли класс, полученный в качестве параметра, тем же классом или суперклассом каждого элемента списка.

Class<? extends A> используется для разрешены только типы типа A или подкласса, которые являются типом элементов, разрешенных в списке.

1 голос
/ 29 апреля 2020

Вы можете сделать что-то вроде этого:

List<A> list = (...);

public static void print(Class klass) {
  for(A a : list) {
    if(klass.isInstance(a)) {
      System.out.println(a);
    }
  }
}

Чтобы использовать его:

print(C.class);

Или

C c = new C();

print(c.getClass());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...