2011-11-21 39 views
3

我是Java新手,想了解更多。我有一個目前的問題,我想要一個答案,但我也想知道這個技術是什麼,以便我可以做一些進一步的閱讀。Java術語

我現在有一個服務方法我有(忽略了(我不能工作,如何讓<留在這)

public Class < ? extends BasicActivityExtension> getExtensionByActivity(BasicActivity  activity, 
     ExtensionTypes type) throws Exception { 
.... 
} 

像這樣

public class BasicActivityExtension 
{ 
public Boolean basicExtensionMethod(){} 
...} 

pubic class MyExtension extends BasicActivityExtension 
{public Boolean myExtensionMethod(){}...} 

然後我的問題是爲什麼這會給出錯誤,這個技術的名稱是什麼(當正確完成時!)

MyExtension members = (MyExtension) activityService.getExtensionByActivity(activity,   ExtensionTypes.member); 

錯誤是 無法從Class轉換爲MyExtension;如果我有一個對象類<?擴展BasicActivityExtension>我怎麼才能調用BasicActivityExtension中的泛型方法而不關心它是什麼類?

乾杯,

羅布

+0

「BasicActivityExtension」和「basicExtension」之間的關係不清楚。你能澄清嗎?另外,諸如'basicExtension'的類名應該是大寫的。 – beny23

回答

3

看樣子你想

<T extends BasicActivityExtension> 
public T getExtensionByActivity(BasicActivity activity, ExtensionTypes type) { 
.... 
} 

當您指定Class它必須是一個類的對象,而不是一個類的實例。

順便說一句:我會避免盲目投擲Exception有更好的方法來處理檢查的異常。

+0

+1爲檢查異常點:) – mprabhat

+1

完美的工作謝謝你:) – Rob

1

你在做什麼叫做鑄造

由於您正在從方法getExtensionByActivity返回類型爲Class的對象,因此出現問題。但是,您正試圖將其轉換爲類型爲MyExtension的對象。您將通過將getExtensionByActivity的返回類型從Class更改爲MyExtension來解決此問題。

+0

乾杯,這對我看到錯誤的地方非常有用 - 一個班級和一個對象是如此不同,但我讓他們混在一起,歡呼。 – Rob

1

歡迎來到Java世界,啓動Java 1.5泛型(類似於C++模板)是在Java中引入的。你可以閱讀更多關於泛型here

在給定的代碼中,不清楚basicExtenstionMyExtenstionActivity之間的關係。

爲了調用BasicExtenstionActivity你必須遵循所謂爲Program to an interface模式方法,

您的代碼應該是這個樣子

public Class<T extends BasicExtensionActivity> getBasicExtensionActivity(...) throws Exception. 

希望這有助於。

+0

感謝您的額外閱讀,已經用它來了解更多,並學習如何做設置乾杯, – Rob