2011-11-27 122 views
2
public <S extends CharSequence> S foo(S s){ 
    return null; 
} 

我在其中一個OCJP問題中發現了這種方法。但是我發現很難理解返回類型<S extends CharSequence> S的含義。有人在Java中有知識可以解釋我的含義嗎?<S擴展CharSequence> S的意思是什麼?

回答

2

定義<S extends CharSequence>表示S是擴展或實現CharSequence的類型。

請注意在foo之前及之後存在S。這意味着foo返回一個類型,該類型擴展或實現了CharSequence,並接受相同類型的參數。

0

S foo(S s)表示foo方法採用類型爲S的參數,並將返回S

此外,方法foo正在定義哪種類型可用於:S(您的模板化結果)是CharSequence的子類。

例如,您使用可以稱之爲:

foo("example") 

這將返回一個字符串(這是有效的,因爲StringCharSequence一個子類

而且這種具體實施在所有情況下返回null。

1

我的意思是說,foo方法需要一個CharSequence(或它的子類或實現類)並作爲參數,並返回相同的類型作爲返回v ALUE。

例如,你可以調用類的方法,這

CharSequence s = ... 
CharSequence result = foo(s); 

String s = ... 
String result = foo(s); 

StringBuffer s = ... 
StringBuffer result = foo(s); 

但是,它不允許你使用不匹配的返回和參數類型。這些都不是OK:

String s = ... 
StringBuffer result = foo(s); 

StringBuffer s = ... 
String result = foo(s); 
0

線讀取: 方法foo作爲參數S類型的任何對象,並返回型S的目的,給定S延伸CharSequence。 如果你採取的StringBuilder(擴展的CharSequence)爲例,把它在這方面它會給如下:

public StringBuilder foo (StringBuilder s) 
0

<S extends CharSequence>不是一部分的返回類型。它在您的通用方法foo中引入了一個類型參數。這裏S被引入作爲由CharSequence定界的類型參數(上)。foo需要參數類型S也返回相同。

相關問題