Java 如何确定类是否实现了标记接口
我在面试时收到了这个问题,问题是 如何确定类是否实现了标记接口Java 如何确定类是否实现了标记接口,java,Java,我在面试时收到了这个问题,问题是 如何确定类是否实现了标记接口 如果有办法找到,如何知道实现了哪个标记接口 if(MarkerInterface.class.isAssignableFrom(otherClass.class)) 假设您有一个名为MarkerInterface的接口和一个类OtherClass实现MarkerInterface 你可以在main中运行类似的程序 if(MarkerInterface.class.isAssignableFrom(OtherClass.class))
如果有办法找到,如何知道实现了哪个标记接口
if(MarkerInterface.class.isAssignableFrom(otherClass.class))
假设您有一个名为MarkerInterface
的接口和一个类OtherClass实现MarkerInterface
你可以在main中运行类似的程序
if(MarkerInterface.class.isAssignableFrom(OtherClass.class))
{
System.out.println("Otherclass uses the MarkerInterface");
}
使用:
确定由类或接口实现的接口
由这个对象表示
如果此对象表示类,则返回值为数组
包含表示由实现的所有接口的对象
班级。数组中接口对象的顺序对应于
的implements子句中接口名称的顺序
此对象表示的类的声明。例如
鉴于宣言:
class Shimmer implements FloorWax, DessertTopping { ... }
假设s的值是Shimmer的一个实例;价值
表达方式:
s.getClass().getInterfaces()[0]
是表示接口布局的类对象;价值呢
其中:
是表示接口甜点的类对象
但是,请注意,这种方法在以下情况下不会返回true,即使用超类Shimmer
实现接口,例如:
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 answer withWhy减号中所述的方法。我想澄清这是一个面试问题。如果你没有显示任何先前研究的迹象,这有意义吗。我们的想法是,我们总是帮助你“更进一步”——假设你试图自己迈出第一步。在这里放一个问题“请向我解释”不算“之前的研究”。@GhostCat我曾尝试在google中找到解决方案,但在stackoverflow社区的最后选项中,我没有找到任何解决方案。也许我没有在这个话题上做太多的研究。没关系。之前的研究中有一点是:如果你想不出好词来搜索,你可能会做一些搜索并得出“我什么都找不到”的结论。但是:特别是当你是新手,而且是Java新手的时候,你能想到的大多数问题。。。这里有人问过。所以很可能你只需要搜索更长的时间…注意:虽然这是正确的,但这只是事实的一部分。这种方法不会告诉你由你正在研究的对象的超类实现的接口(我想是这样)。@GhostCat哦,很有趣。也许我错了,但这是你的答案;还有你的名声;因此,这符合您的利益;-)@幽灵猫的确,你是对的。我将编辑我的答案以反映这一点。
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]);
}