2013-03-19 104 views
4

我看到這一點:含義<T,U延伸T>在Java函數聲明

public static <T,U extends T> AutoBean<T> getAutoBean(U delegate) 

我知道輸入類爲U型的,AutoBean類爲T型的和U延伸T是邊界。但<T,在這裏意味着什麼?另外,如果我要編寫一個函數來接受getAutoBean的輸出,那麼如何編寫函數聲明? (即myFunction(getAutoBean(...)),myFunction()的函數聲明是什麼?)

謝謝!

+1

你是不是故意將'括號內的一部分。 – Retsam 2013-03-19 03:40:22

+0

不,我只是在U括號中的T擴展T前面提問。 – user1589188 2013-03-19 03:58:36

+0

聲明可能可以改進,像' AutoBean getAutoBean(U delegate)' – ZhongYu 2013-03-19 04:21:46

回答

2

它只是聲明你的方法處理的類型。也就是說,它基本上必須首先聲明泛型類型名稱,然後才能在簽名中使用它們。 <T本身並不意味着任何東西,但括號內的字母表示「這裏是我將要在該方法中使用的類型」。

至於 「myFunction的()」 與的getAutoBean(...)輸出工作:

 
public static <T> String myFunction(AutoBean<T> arg){ // If you return a generic type object, you will also have to declare it's type parameter in the first angular brackets and in angular brackets after it. 
    // do work here 
} 

+1

不夠用,需要更多解釋 – luqui 2013-03-19 03:39:47

+0

謝謝!我認爲公共靜態字符串就足以說返回類型是字符串。我不知道在String之前我需要額外的(因爲在我原來的問題 user1589188 2013-03-19 03:57:06

+0

如果你打算這樣做,那麼不妨將它聲明爲'public static String myFunction(AutoBean arg)' – newacct 2013-03-19 07:09:04

1

這意味着該類型U必須擴展類型T。例如,這些類型可以代替TU

class TType { } 
class UType extends TType { } 

至於什麼<T,手段,聲明它的通用類型的函數中使用。下面是示例性的使用:

UType uType = new UType(); 
AutoBean<TType> autobean = getAutoBean(uType); 
3

<T>是將由該方法要返回的AutoBean的類型。 另請注意,輸入參數類型<U>必須擴展類型<T>以調用該方法。

1

正如lbolit說,宣佈與你的方法處理,即在此情況下,T的返回類型和U的參數,它是T

3

<T,U extends T>的一個子類聲明的靜態方法的類型參數。該方法有兩個類型參數,一個類型爲T,第二個類型爲U,擴展了第一個。

這些可以是不同的,當顯式地指定爲類型參數綁定如

AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate"); 

假設getAutoBeanFoo類的成員。

相關問題