的返回类型是什么? S的意思是?
public <S extends CharSequence> S foo(S s){
return null;
}
我在 OCJP 问题之一中找到了这种方法。但我发现很难理解返回类型 到底是什么。 S 的意思是。有Java知识的人可以帮我解释一下这是什么意思吗?
public <S extends CharSequence> S foo(S s){
return null;
}
I found this method in one of the OCJP question. But I find it difficult to understand what exactly the return type <S extends CharSequence> S
means. Could someone having knowledge in Java explain me what it means?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
定义
意味着S
是扩展或实现CharSequence
的类型。请注意
foo
之前和之后存在S
。这意味着 foo 返回一个扩展或实现 CharSequence 的类型,并接受相同类型的参数。The definition
<S extends CharSequence>
means thatS
is a type that extends or implementsCharSequence
.Note the presence of
S
beforefoo
and after it. This means thatfoo
returns a type that either extends or implementsCharSequence
, and accepts an argument of the same type.我的意思是方法 foo 接受 CharSequence (或其子类或实现类)作为参数,并返回相同类型作为返回值。
例如,您可以调用这样的方法
or
或
但是,它不允许您使用不匹配的返回和参数类型。这些都不行:
或者
I means that method foo takes a CharSequence (or it's subclass or implementing class) and as a parameter and returns the same type as return value.
For example you can call the method like this
or
or
However, it does not allow you to use mismatching return and parameter types. These are not ok:
or
S foo(S s)
表示foo
方法采用S
类型的参数,并将返回一个S
>。此外,方法
foo
定义了您可以使用它的类型:S
(您的模板化结果)是CharSequence
的子类。例如,您可以使用以下方式调用它:
这将返回一个 String (它是有效的,因为
String
是CharSequence
的子类。并且此特定实现在所有情况下都返回 null。
S foo(S s)
means that thefoo
method takes a parameter of typeS
, and will return anS
.Also the method
foo
is defining which type you can use it for:S
(your templated result) is a subclass ofCharSequence
.For example, you can call it using:
And that will return a String (It's valid because
String
is a subclass ofCharSequence
.And this specific implementation returns null in all cases.
该行内容如下:
方法
foo
将任何S
类型的对象作为参数,并返回一个 S 类型的对象,假设S
扩展了CharSequence
>。如果您以 StringBuilder(扩展 CharSequence)为例并将其放入此上下文中,它将给出以下内容:
The line reads:
Method
foo
takes as a parameter any object of typeS
and returns an object of type S, givenS
extendsCharSequence
.If you take StringBuilder (extends CharSequence) for example and put it in this context it will give the following:
不是返回类型的一部分。它在泛型方法foo
中引入了一个类型参数。这里S
被引入作为由CharSequence
限制的类型参数(上部)。foo
接受一个S
类型的参数也返回相同的结果。<S extends CharSequence>
is not a part the return type. It introduces a type parameter in your generic methodfoo
. HereS
is introduced as a type parameter (upper) bounded byCharSequence
.foo
takes a parameter of typeS
also returns the same.