2011-11-27 62 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也返回相同。

相关问题