2012-09-06 170 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'的實例,直接調用該方法並讓程序在運行時決定......將根據實際對象調用引用變量。

相關問題