当前位置: 首页 > 知识库问答 >
问题:

如何检查类是否实现接口[重复]

曾瀚昂
2023-03-14

好了,

我有一个标记接口:

interface IPOJO {
}

然后我有一个类实现这个接口:

class MePOJO implements IPOJO {
}

现在假设我有一个class对象持有类MePOJO的引用:

Class<MePOJO> classObj = MePOJO.class;

那么,我如何通过使用classObj来确定MePOJO类是否实现了IPOJO

共有3个答案

劳麒
2023-03-14

正确的方法不是使用标记接口,而是使用注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public static @interface Pojo {
}

@Pojo
public static class MePojo {
}

public static void main(String[] args) throws Exception {
    System.out.println(MePojo.class.isAnnotationPresent(Pojo.class));
}

输出:

true

这样就不会用标记接口污染名称空间。

东方俊力
2023-03-14

有几种方法可以实现这一点。

或者使用您创建的对象的类类型并检索列表及其实现的所有接口

MePOJO test = new MePOJO();
Class[] interfaces = test.getClass().getInterfaces();
for (Class c : interfaces) {
   if ("IPOJO".equals(c.getSimpleName()) {
      System.out.println("test implements IPOJO");
   }
}

或者使用类#isAssignableFrom(类clazz)方法:

Class<?> clazz = MePOJO.class;
System.out.println(IPOJO.class.isAssignableFrom(clazz));
白和泽
2023-03-14

您应该使用Class#isAsSignablefrom(Class

Class<?> classObj = MePOJO.class;
System.out.println(IPOJO.class.isAssignableFrom(classObj));

输出:

true

 类似资料:
  • 我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty

  • 问题内容: 如何检查某个类是否实现接口?当有: 如何检查是否实现接口? 该方法是否被正确覆盖,因此可以返回新创建的方法? 问题答案: 对于一个实例 然后做 对于Class实例

  • 问题内容: 所以我在Java中有这个课程: 在这个类中,我想知道T是否实现某些接口。 以下代码不起作用,但这是我要完成的工作的主意: 所以我想检查传递给Foo 的类是否具有其签名。 可能吗?怎么样? 问题答案: 奇怪的是,泛型也用于接口。1您将要使用: 这实际上是实现的要求, 而不是true / false check 。 为了进行真/假检查,请使用无限制的generics()并确保获得a,以便您

  • 问题内容: 我已经读过“ EffectiveGo”和其他类似的问答:golang接口符合性编译类型检查,但是我仍然无法正确理解如何使用此技术。 请参见示例: 如果实现了接口,是否有任何简单的方法(例如,不使用反射)检查值? 问题答案: 如果您不知道值的类型,则只需检查值是否实现了接口。如果类型已知,则该检查由编译器自动完成。 如果您仍然想进行检查,则可以使用您提供的第二种方法进行检查: 在编译时会

  • 我试图使用反射来确定传入类是否实现了接口: 这是确定这一点的最佳/最有效的方法吗?我还看到一个

  • 问题内容: 我正在搜索一个给定值的切片: 在普通情况下,类型为。但是,例如,如果类型是一些自定义的,该怎么办? 问题答案: 感谢@CodingPickle评论,我提供了Go编程语言规范中的以下内容 等号运算符==和!=适用于可比较的操作数。 关于s和: 接口值是可比较的。如果两个接口值具有相同的动态类型和相等的动态值,或者两个接口值都为nil,则它们相等。 当类型X的值可比较并且X实现T时,非接口