拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用反射检查Java类是否是abstract

使用反射检查Java类是否是abstract

白鹭 - 2021-11-24 363 0 0

1.概述

在本快速教程中,我们将讨论如何通过使用Reflection API来检查Java中的类是否抽象。

2.示例类和接口

为了说明这一点,我们将创建一个AbstractExample类和一个InterfaceExample接口:

public abstract class AbstractExample {



 public abstract LocalDate getLocalDate();



 public abstract LocalTime getLocalTime();

 }



 public interface InterfaceExample {

 }

3. Modifier#isAbstract方法

我们可以使用Reflection API中Modifier#isAbstract方法检查类是否为abstract

@Test

 void givenAbstractClass_whenCheckModifierIsAbstract_thenTrue() throws Exception {

 Class<AbstractExample> clazz = AbstractExample.class;



 Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));

 }

在上面的示例中,我们首先获取要测试的类的实例。一旦有了类引用,就可以调用Modifier#isAbstract方法。不出我们所料,它返回true如果类是abstract ,否则,它返回false

值得一提的是interface类也是abstract 。我们可以通过一种测试方法来验证它:

@Test

 void givenInterface_whenCheckModifierIsAbstract_thenTrue() {

 Class<InterfaceExample> clazz = InterfaceExample.class;



 Assertions.assertTrue(Modifier.isAbstract(clazz.getModifiers()));

 }

如果我们执行上面的测试方法,它将通过。

Reflection API也提供了isInterface()方法。如果我们要检查给定的类是否是abstract类而不是interface ,则可以将两种方法结合使用:

@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

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *