2012-09-06 120 views
1

这里是一个例子:检查类是否实现接口

有一个基本的类(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(); 
     } 
} 

但这不起作用,因为它说,它不能投变量I.

我如何能实现所需的行为吗?此外,我不能修改P和使其实现一

+1

这应该没问题(假设'P'是一些合理的类型) - 请发布简短但完整的*程序来证明问题。 –

+0

我不确定我是否可以发布简短的程序...我正在使用android,并且我有一个处理多个自定义片段的活动来扩展片段类。在活动中,我得到了私有变量Class <?扩展Fragment> currentFragment。我试图检查它是否实现了指定的接口。示例:public class ContentFragment extends Fragments implements Stackable。我只是不想让所有的片段都实现它,我也不能让Fragment类实现它。 – Graykos

回答

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)); 
} 
0

我觉得你并不需要显式类型转换的变量一 一旦你检查它是否是'I'的实例,直接调用该方法并让程序在运行时决定......将根据实际对象调用引用变量。

相关问题