1. Обзор
В этом кратком руководстве мы обсудим, как мы можем проверить, является ли класс абстрактным
или нет в Java, с помощью Reflection API.
2. Пример класса и интерфейса
Чтобы продемонстрировать это, мы создадим класс AbstractExample и
интерфейс InterfaceExample
:
public abstract class AbstractExample {
public abstract LocalDate getLocalDate();
public abstract LocalTime getLocalTime();
}
public interface InterfaceExample {
}
3. Метод Modifier#
isAbstract
Мы можем проверить, является ли класс абстрактным
, используя метод Modifier#isAbstract
из Reflection API:
@Test
void givenAbstractClass_whenCheckModifierIsAbstract_thenTrue() throws Exception {
Class<AbstractExample> clazz = AbstractExample.class;
Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));
}
В приведенном выше примере мы сначала получаем экземпляр класса, который хотим протестировать. Получив ссылку на класс, мы можем вызвать метод Modifier#
isAbstract . Как и следовало ожидать, он возвращает true
, если класс является abstract
, и в противном случае возвращает false
.
Стоит отметить, что интерфейсный
класс также является абстрактным
. Мы можем проверить это тестовым методом:
@Test
void givenInterface_whenCheckModifierIsAbstract_thenTrue() {
Class<InterfaceExample> clazz = InterfaceExample.class;
Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));
}
Если мы выполним тестовый метод выше, он пройдет.
API Reflection также предоставляет метод isInterface()
. Если мы хотим проверить, является ли данный класс абстрактным
, но не интерфейсом
, мы можем объединить два метода:
@Test
void givenAbstractClass_whenCheckIsAbstractClass_thenTrue() {
Class<AbstractExample> clazz = AbstractExample.class;
int mod = clazz.getModifiers();
Assertions.assertTrue(Modifier.isAbstract(mod) && !Modifier.isInterface(mod));
}
Давайте также проверим, что конкретный класс возвращает соответствующие результаты:
@Test
void givenConcreteClass_whenCheckIsAbstractClass_thenFalse() {
Class<Date> clazz = Date.class;
int mod = clazz.getModifiers();
Assertions.assertFalse(Modifier.isAbstract(mod) && !Modifier.isInterface(mod));
}
4. Вывод
В этом уроке мы увидели, как мы можем проверить, является ли класс абстрактным
или нет.
Кроме того, на примере мы рассмотрели, как проверить, является ли класс абстрактным
классом, а не интерфейсом .
Как всегда, полный код этого примера доступен на GitHub .