Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定类是否实现了标记接口_Java - Fatal编程技术网

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 with

Why减号中所述的方法。我想澄清这是一个面试问题。如果你没有显示任何先前研究的迹象,这有意义吗。我们的想法是,我们总是帮助你“更进一步”——假设你试图自己迈出第一步。在这里放一个问题“请向我解释”不算“之前的研究”。@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]);
}