如何识别类是否已实现标记接口

时间:2016-07-28 09:08:16

标签: java

我在采访中收到了这个问题,问题是

  

如何识别类是否已实现标记接口

如果有办法找到,如何知道实施哪个标记接口

2 个答案:

答案 0 :(得分:6)

你可以使用像

这样的东西来做到这一点

Remote Start All

想象一下,您有一个名为if(MarkerInterface.class.isAssignableFrom(otherClass.class))的接口和一个类MarkerInterface

你可以在主

中运行这样的东西
OtherClass implements MarkerInterface

答案 1 :(得分:3)

使用Class#getInterfaces()

  

确定类或接口实现的接口   由这个对象代表。

     

如果此对象表示类,则返回值为数组   包含表示由实现的所有接口的对象   类。数组中接口对象的顺序对应于   。的implements子句中接口名称的顺序   此对象表示的类的声明。例如,   鉴于声明:

class Shimmer implements FloorWax, DessertTopping { ... }
     

假设s的值是Shimmer的一个实例;的价值   表达式:

s.getClass().getInterfaces()[0]
     

是表示接口FloorWax的Class对象;和价值   的:

s.getClass().getInterfaces()[1]
     

是表示接口DessertTopping的Class对象。

但请注意,对于Shimmer的超类实现接口的情况,此方法不会返回true,例如如下所示:

public interface FloorWax { }

public interface DesertTopping { }

public class Shimmer implements implements FloorWax, DessertTopping { }

public class ShimmerChild extends Shimmer {}

public static void main(String[] args) {
    // throws ArrayOutOfBoundsException
    System.out.println(new ShimmerChild().getClass().getInterfaces()[0]);
}

如果您希望以下内容返回接口,请使用@DylanMeeus中所述的方法回答Class#isAssignableFrom()