检查类是否实现了接口

时间:2012-09-06 06:09:52

标签: java inheritance interface

以下是一个例子:

有一个基本类(A)可以处理许多不同的类(比如B,C,D都可以扩展P)。在A类中,我需要调用类似的函数:

 public void doSmth(P variable) {
      B b = (B)variable;
      b.getSomeImportantInfo();
 }

为此,我试图添加一个接口(I)并定义B,C,D实现它。

问题是,doSmth将适用于所有这些类(B,C,D),我不希望所有这些类都实现此接口。所以我试着做这样的事情:

 public void doSmth(P variable) {
      if(variable instanceof I) {
           ((I)variable).getSomeImportantInfo();
      }
 }

但这不起作用,因为它说不能向我投射变量。

我如何实现所需的行为?另外,我无法修改P并使其实现I。

2 个答案:

答案 0 :(得分:0)

我认为太晚了,但是:

public static boolean isImplementsInterface(Class interfaze, Class clazz) {
    for (Class c : clazz.getInterfaces()) {
        if (c.equals(interfaze)) {
            return true;
        }
    }
    return false;
}

public static void main(String[] args) {
    System.out.println(isImplementsInterface(CharSequence.class, String.class));
}

答案 1 :(得分:0)

我认为你不需要明确地将变量强制转换为I。 一旦你检查它是否是' I'的实例,直接调用该方法并让程序在运行时决定...将根据实际对象调用,引用变量引用。