我在采访中收到了这个问题,问题是
如何识别类是否已实现标记接口
如果有办法找到,如何知道实施哪个标记接口
答案 0 :(得分:6)
你可以使用像
这样的东西来做到这一点 Remote Start All
想象一下,您有一个名为if(MarkerInterface.class.isAssignableFrom(otherClass.class))
的接口和一个类MarkerInterface
。
你可以在主
中运行这样的东西OtherClass implements MarkerInterface
答案 1 :(得分:3)
确定类或接口实现的接口 由这个对象代表。
如果此对象表示类,则返回值为数组 包含表示由实现的所有接口的对象 类。数组中接口对象的顺序对应于 。的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()