返回类型<s extends =“”charsequence =“”> S是什么意思?</s>

时间:2011-11-27 15:42:14

标签: java generics scjp

public <S extends CharSequence> S foo(S s){
    return null;
}

我在其中一个OCJP问题中找到了这个方法。但我发现很难理解返回类型<S extends CharSequence> S到底意味着什么。有Java知识的人可以解释一下它的含义吗?

5 个答案:

答案 0 :(得分:2)

定义<S extends CharSequence>表示S是一种扩展或实现CharSequence的类型。

请注意S之前及之后foo的存在。这意味着foo返回一个扩展或实现CharSequence的类型,并接受相同类型的参数。

答案 1 :(得分:1)

我的意思是方法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);

答案 2 :(得分:0)

S foo(S s)表示foo方法采用S类型的参数,并返回S

方法foo也定义了您可以使用它的类型:S(您的模板化结果)是CharSequence的子类。

例如,您可以使用以下方法调用它:

foo("example")

这将返回一个字符串(它有效,因为StringCharSequence的子类。

此特定实现在所有情况下都返回null。

答案 3 :(得分:0)

该行写道: 方法foo将任何类型为S的对象作为参数,并返回类型为S的对象,给定S extends CharSequence。 如果您将StringBuilder(扩展CharSequence)作为示例并将其置于此上下文中,它将提供以下内容:

public StringBuilder foo (StringBuilder s) 

答案 4 :(得分:0)

<S extends CharSequence>不是返回类型的一部分。它在泛型方法foo中引入了一个类型参数。这里引入S作为由CharSequence限定的类型参数(上)。 foo采用S类型的参数也会返回相同的内容。