5 に答える
定義は、それがを拡張または実装するタイプであること<S extends CharSequence>を意味します。SCharSequence
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);
次の行は次のとおりです。メソッドfooは、パラメータとしてタイプのオブジェクトを受け取り、extendsSを指定すると、タイプSのオブジェクトを返します。たとえば、StringBuilder(CharSequenceを拡張)をこのコンテキストに置くと、次のようになります。SCharSequence
public StringBuilder foo (StringBuilder s)
<S extends CharSequence> リターンタイプの一部ではありません。ジェネリックメソッドに型パラメーターを導入しますfoo。ここでSは、で囲まれた型パラメータ(上)として紹介されていますCharSequence。fooタイプのパラメータを取りS、同じものを返します。
S foo(S s)は、fooメソッドが 型のパラメーターを取り、 Sを返すことを意味しますS。
また、メソッドfooは、それを使用できるタイプを定義しています: S(テンプレート化された結果) は のサブクラスですCharSequence。
たとえば、次のように呼び出すことができます。
foo("example")
そして、それは文字列を返します(Stringは のサブクラスであるため有効ですCharSequence。
そして、この特定の実装は、すべての場合に null を返します。