5 回答
定义<S extends CharSequence>
意味着这S
是一个扩展或实现的类型CharSequence
。
注意它S
之前foo
和之后的存在。这意味着foo
返回一个可以扩展或实现的类型CharSequence
,并接受相同类型的参数。
我的意思是方法 foo 采用 CharSequence (或者它的子类或实现类)并作为参数并返回与返回值相同的类型。
例如,您可以像这样调用该方法
CharSequence s = ...
CharSequence result = foo(s);
或者
String s = ...
String result = foo(s);
或者
StringBuffer s = ...
StringBuffer result = foo(s);
但是,它不允许您使用不匹配的返回和参数类型。这些都不行:
String s = ...
StringBuffer result = foo(s);
或者
StringBuffer s = ...
String result = foo(s);
S foo(S s)
表示该foo
方法接受一个类型为 的参数 S
,并将返回一个S
.
该方法foo
还定义了您可以将其用于哪种类型:(S
您的模板化结果)是CharSequence
.
例如,您可以使用以下方式调用它:
foo("example")
这将返回一个字符串(它是有效的,因为它String
是CharSequence
.
而这个特定的实现在所有情况下都返回 null。
该行内容如下: Methodfoo
将任何类型的对象作为参数,S
并返回一个 S 类型的对象,给定S
extends CharSequence
。如果您以 StringBuilder(扩展 CharSequence)为例并将其放在此上下文中,它将给出以下内容:
public StringBuilder foo (StringBuilder s)
<S extends CharSequence>
不是返回类型的一部分。它在您的泛型方法中引入了一个类型参数foo
。这里S
作为类型参数(上)引入,由CharSequence
. foo
接受一个类型的参数S
也返回相同的。