2012-06-04 59 views
8

我不帶參數創建一個通用的方法,一些事情,如:泛型方法不帶參數

private <T> TableCell<T> createTableCell(){ 
return new TableCell<T>(); 
} 

所以,在我的程序,如何調用該方法的具體類型?

+0

一旦你調用這個方法,它將返回類型T的TableCell,即T保存類的類型 –

+1

你是不是指「返回」而不是「返回」? –

+0

一般來說,當我調用這個方法時,它會返回TableCell ,但我想把它轉換成一個具體類型,稱爲類A和B.那麼如何實現這個? – Thinhbk

回答

21

通常,類型推斷的,但你可以指定這個語法類型:

注:您的方法的定義錯誤 - 它沒有返回類型:

private <T> TableCell<T> createTableCell(){ 
    return new TableCell<T>(); 
} 

這裏的你如何稱呼它:

TableCell<SomeType> tableCell = myObject.<SomeType>createTableCell(); 


如果方法不訪問任何領域,可考慮將其static甲基OD,你會叫這樣的:

TableCell<SomeType> tableCell = MyClass.<SomeType>createTableCell(); 


順便說一句,當你使用這個語法,很多人會在你的「eliteness」驚歎 - 這不是經常看到的語法。

+0

是的,你是對的。這是我的錯誤。 無論如何,泛型方法是在非泛型類中,我希望此類的其他方法調用此泛型類,而不是其他類的方法。 – Thinhbk

+2

是的。我也先發布了正確答案。 (其他答案在我發佈之後進行了編輯 - 我認爲他複製了我的)。納米。 – Bohemian

+0

感謝您的解釋,它幫助我更清楚地理解,因爲定義泛型類和泛型方法的語法讓我感到困惑。 – Thinhbk

-2

你會調用這個方法,就像你調用它裏面的構造函數一樣:createTableCell<TypeName>()

+0

不幸的是它不起作用。 – Thinhbk

+0

嗯,在這種情況下,您將不得不擴展方法簽名以包含類型提示。通常的做法是,如果您確實沒有任何與進入方法相關的內容,則可以使用一個'Class '參數,該參數僅用於指定類型。然後,您可以將該方法作爲'createTableCell(TypeName.class)'調用。 – Wormbo

6

因爲類型不能從上下文中推斷出(當調用方法),你必須指定它在如下因素方呼叫時:

obj.<MyType>createTableCell() 

其中obj是一類/類型的對象包含該方法。

+1

其實語法是'obj。 createTableCell()'。 – missingfaktor

+0

@missingfaktor是的。謝謝。我實際上是在嘗試它,因爲我總是忘記這種情況下的語法......你比我快我 –

+0

@missingfaktor:你是對的。非常感謝。 – Thinhbk