如何检查对象是不是实现了接口? [复制]

Posted

技术标签:

【中文标题】如何检查对象是不是实现了接口? [复制]【英文标题】:How to check if an object implements an interface? [duplicate]如何检查对象是否实现了接口? [复制] 【发布时间】:2012-04-27 07:07:12 【问题描述】:

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

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() 方法是否被正确覆盖,所以它可以返回新的 gor 创建的 level

【问题讨论】:

我认为你需要 instanceof 关键字。 【参考方案1】:

举个例子

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)怎么样?正确的语法是什么? 是的,...isAssignableFrom(),唯一能确定 Gorgonite 的方法就是怪物。【参考方案2】:

使用

if (gor instanceof Monster) 
    //...

【讨论】:

这个答案对于没有任何复杂内部类或那些东西的用户很有用。干得好。【参考方案3】:

一般适用于任何类的AnInterfaceanInstance

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于如何检查对象是不是实现了接口? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 String 对象是不是是链接? [复制]

如何检查一个对象在 Python 中是不是可迭代? [复制]

如何检查我的 python 对象是不是为数字? [复制]

如何检查页面上是不是已存在具有 ID 的对象? [复制]

如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]

在类的实例化期间如何检查该类的对象是不是已经存在,如果存在,则指向已经存在的对象? [复制]