2010-01-16 70 views
6

編輯:解決了,見下面的Java - 確保一個對象實現的接口

嗨,

在Java中,我得到了一個對象,它可以是任何種類的。但 - 該對象將始終需要實現一個接口,所以當我調用接口定義的方法時,該對象將包含該方法。

現在,當您嘗試在Java中的通用對象上調用自定義方法時,它會忽略鍵入操作。我怎樣才能以某種方式告訴編譯器,我的對象確實實現了該接口,因此調用該方法是可以的。

基本上,我正在尋找的是這樣的:

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

我如何能做到這一點在Java中?

答:OK,如果接口名爲MyInterface的你可以把

MyInterface obj; 
obj.resolve(); 

對不起,發佈前沒有想到....

+0

*微笑* - +1爲您的最後一句話:-) – 2010-01-16 14:31:05

回答

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

((MyInterface)obj).resolve(); 

java編譯器使用靜態類型ch eck的方法,所以你必須將對象轉換爲實現你的接口的類型或者轉換爲接口本身。

3

你只是做了一個type cast

((MyInterface) object).resolve(); 

通常最好是做一次檢查,以確保這個轉換是有效的 - 否則,你會得到一個ClassCastException。你不能將任何不執行MyInterface的東西硬塞進一個MyInterface對象中。你做這個檢查的方式是與instanceof運營商:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
}