如何检查一个对象是否实现了一个接口?

150

如何检查某个类是否实现了接口?

当有以下代码:

Character.Gorgon gor = new Character.Gorgon();

如何检查gor是否实现Monster接口?

public interface Monster {

    public int getLevel();

    public int level = 1;
}

public class Character {
    public static class Gorgon extends Character implements Monster {
        public int level;
        @Override
        public int getLevel() { return level; }

        public Gorgon() {
            type = "Gorgon";
        }
    }
}
Gorgon中覆盖了getLevel()方法,以便正确返回新创建的gorlevel值。

我认为你需要使用 instanceof 关键字。 - Martin Röbert
4个回答

250

举个例子

Character.Gorgon gor = new Character.Gorgon();

然后执行

gor instanceof Monster

对于一个类的实例,应该执行什么操作?

Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);

方法参数 public void doSomething([Object implements Serializable] param) 怎么样?这个的正确语法是什么? - Tomáš Zato
1
是的,...isAssignableFrom(),这是确定Gorgonite是否为怪物的唯一方法。 - Joe Almore

46

使用

if (gor instanceof Monster) {
    //...
}

这个答案对于没有任何复杂内部类或其他东西的用户非常有用。干得好。 - Macintosh Fan

35

一般来说,对于任何类的 AnInterfaceanInstance

AnInterface.class.isAssignableFrom(anInstance.getClass());

1
如果您想要一个像 public void doSomething([Object implements Serializable]) 这样的方法,您只需像这样输入:public void doSomething(Serializable serializableObject)。现在您可以传递任何实现了 Serializable 接口的对象,但是使用 serializableObject 您只能访问从 Serializable 接口中实现的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接