public <S extends CharSequence> S foo(S s){
return null;
}
我在其中一个OCJP问题中发现了这种方法。但是我发现很难理解返回类型<S extends CharSequence> S
的含义。有人在Java中有知识可以解释我的含义吗?<S扩展CharSequence> S的意思是什么?
public <S extends CharSequence> S foo(S s){
return null;
}
我在其中一个OCJP问题中发现了这种方法。但是我发现很难理解返回类型<S extends CharSequence> S
的含义。有人在Java中有知识可以解释我的含义吗?<S扩展CharSequence> S的意思是什么?
定义<S extends CharSequence>
表示S
是扩展或实现CharSequence
的类型。
请注意在foo
之前及之后存在S
。这意味着foo
返回一个类型,该类型扩展或实现了CharSequence
,并接受相同类型的参数。
S foo(S s)
表示foo
方法采用类型为S
的参数,并将返回S
。
此外,方法foo
正在定义哪种类型可用于:S
(您的模板化结果)是CharSequence
的子类。
例如,您使用可以称之为:
foo("example")
这将返回一个字符串(这是有效的,因为String
是CharSequence
一个子类
而且这种具体实施在所有情况下返回null。
我的意思是说,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);
线读取: 方法foo
作为参数S
类型的任何对象,并返回型S的目的,给定S
延伸CharSequence
。 如果你采取的StringBuilder(扩展的CharSequence)为例,把它在这方面它会给如下:
public StringBuilder foo (StringBuilder s)
<S extends CharSequence>
不是一部分的返回类型。它在您的通用方法foo
中引入了一个类型参数。这里S
被引入作为由CharSequence
定界的类型参数(上)。foo
需要参数类型S
也返回相同。