1. 概要
このクイックチュートリアルでは、 Reflection APIを使用して、クラスがabstractであるかどうかをJavaで確認する方法について説明します。
2. クラスとインターフェースの例
これを示すために、AbstractExampleクラスとInterfaceExampleインターフェイスを作成します。
public abstract class AbstractExample {
public abstract LocalDate getLocalDate();
public abstract LocalTime getLocalTime();
}
public interface InterfaceExample {
}
3. Modifier#isAbstractメソッド
ReflectionAPIのModifier#isAbstract メソッドを使用して、クラスがabstractであるかどうかを確認できます。
@Test
void givenAbstractClass_whenCheckModifierIsAbstract_thenTrue() throws Exception {
Class<AbstractExample> clazz = AbstractExample.class;
Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));
}
上記の例では、最初にテストするクラスのインスタンスを取得します。 クラス参照を取得したら、Modifier#isAbstractメソッドを呼び出すことができます。 予想どおり、クラスが abstractの場合はtrueを返し、それ以外の場合はfalseを返します。
インターフェイスクラスも抽象的であることに言及する価値があります。 テスト方法で検証できます。
@Test
void givenInterface_whenCheckModifierIsAbstract_thenTrue() {
Class<InterfaceExample> clazz = InterfaceExample.class;
Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));
}
上記のテストメソッドを実行すると、合格します。
Reflection APIは、 isInterface()メソッドも提供します。 特定のクラスがabstractであるが、 interface ではないかどうかを確認したい場合は、次の2つのメソッドを組み合わせることができます。
@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. 結論
このチュートリアルでは、クラスがabstractであるかどうかを確認する方法を見てきました。
さらに、例を通じて、クラスが abstract クラスであるが、interfaceではないかどうかを確認する方法について説明しました。
いつものように、この例の完全なコードは、GitHubでから入手できます。