使用instanceof来测试接口

时间:2014-03-24 22:51:59

标签: java interface instanceof implements

我在这个问题上遇到了一些麻烦。问题是:

编写一个完整的Java程序,执行以下操作:

  • 声明接口I1和I2,两者都是空体
  • 使用空主体声明接口I3,它扩展了两个空主体 以上接口
  • 使用空体声明接口I4
  • class X使用空体
  • 实现I3
  • 具有空体的W类实现I4并扩展X
  • 创建一个InstanceofTest类,在main()中执行以下操作:
    • 创建W类的对象w。
    • 使用instanceof运算符测试对象w是否实现每个 接口的类型为X,并显示相应的 消息。

所以这就是我到目前为止所提出的:


public interface I1
{

}

public interface I2
{

}

public interface I3 extends I1, I2
{

}

public interface I4
{

}

public class W extends X implements I4
{

}

我对InstanceofTest方法有点混淆。我知道instanceof运算符会告诉你某个对象是否是某种类型的实例,就像你这样做的那样:


public class InstanceofTest
{

    public static void main(String[] args)
    {
        W w = new W();
        if (w instanceof X)
        {
            System.out.println("w is an instance of X.");
        }
    }
}

我遇到的问题是使用instanceof来查看w是否实现了每个接口。我不知道我会怎么做。任何帮助将不胜感激!


编辑:那么,我应该这样做吗?


public class InstanceofTest
{
    public static void main(String[] args)
    {
        W w = new W();
        if (w instanceof X)
        {
            System.out.println("w is an instance of X.");
        }

        if (w instanceof I1)
        {
            System.out.println("w implements I1.");
        }

        if (w instanceof I2)
        {
            System.out.println("w implements I2.");
        }

        if (w instanceof I3)
        {
            System.out.println("w implements I3.");
        }

        if (w instanceof I4)
        {
            System.out.println("w implements I4.");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

嗯,这是完整的解决方案:

public interface I1 {}

public interface I2 {}

public interface I3 extends I1, I2 {}

public interface I4 {}

public class X implements I3 {}

public class W extends X implements I4 {}

public class InstanceofTest {
  public static void main(String[] args){
      W w = new W();

      if (w instanceof I1)
        System.out.println("W implements I1");

      if (w instanceof I2)
        System.out.println("W implements I2");

      if (w instanceof I3)
        System.out.println("W implements I3");

      if (w instanceof I4)
        System.out.println("W implements I4");

      if (w instanceof X)
        System.out.println("W extends X");
    }
}

结果将是W实现每个接口并扩展X

答案 1 :(得分:-2)

将这些界面存储在Collection Set<Class> classes中,然后对其进行迭代并与您的对象进行比较。