【问题标题】: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 关键字。

标签: java oop interface


【解决方案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 接口访问对象中实现的方法。

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多