我看到這一點:含義<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()的函數聲明是什麼?)
謝謝!
我看到這一點:含義<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()的函數聲明是什麼?)
謝謝!
它只是聲明你的方法處理的類型。也就是說,它基本上必須首先聲明泛型類型名稱,然後才能在簽名中使用它們。 <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
}
不夠用,需要更多解釋 – luqui 2013-03-19 03:39:47
謝謝!我認爲公共靜態字符串就足以說返回類型是字符串。我不知道在String之前我需要額外的
如果你打算這樣做,那麼不妨將它聲明爲'public static String myFunction(AutoBean > arg)' – newacct 2013-03-19 07:09:04
這意味着該類型U
必須擴展類型T
。例如,這些類型可以代替T
和U
。
class TType { }
class UType extends TType { }
至於什麼<T,
手段,聲明它的通用類型的函數中使用。下面是示例性的使用:
UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);
<T>
是將由該方法要返回的AutoBean的類型。 另請注意,輸入參數類型<U>
必須擴展類型<T>
以調用該方法。
正如lbolit說,宣佈與你的方法處理,即在此情況下,T的返回類型和U的參數,它是T
<T,U extends T>
的一個子類聲明的靜態方法的類型參數。該方法有兩個類型參數,一個類型爲T
,第二個類型爲U
,擴展了第一個。
這些可以是不同的,當顯式地指定爲類型參數綁定如
AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate");
假設getAutoBean
是Foo
類的成員。
你是不是故意將'括號內的一部分。 –
Retsam
2013-03-19 03:40:22
不,我只是在U括號中的T擴展T前面提問。 – user1589188 2013-03-19 03:58:36
聲明可能可以改進,像' AutoBean super U> getAutoBean(U delegate)' – ZhongYu 2013-03-19 04:21:46