しかし、それは何を意味するのでしょうか?
言語には、できるだけシンプルにするためのルールがあり、ここではそれほど有用ではない方法で結合されていることを意味します。
一般的なメソッドには型パラメータがあります。型パラメーターは、戻り値の型、引数のリスト、メソッド本体で使用できます。それは、まったく含まないものを含め、それらの任意の組み合わせで使用できます。
例えば、これらのシグネチャは、両方のに有用であり得る:
<T> T foo(T t) // The return type can be the type parameter
<T> List<T> () // A type parameter does not have to be an argument
は<T> T get()
の場合は、異なる組み合わせ、同じ規則を使用します。
それは役に立ちますか?
特にありません。あなたは実装を示していません。 @LouisWassermanは、インプリメンテーションがにスロー、ヌル、またはハックのいずれかでなければならないという洞察力のあるコメントに注意します。
これは、ハックの例です。これを行うためのより簡単な方法があるので、私はそれを有用と見なしません。 CからJavaに変換してコードをできるだけ並行にしたい場合には便利です。
public static class Union {
public Object o;
public Union(Object value) { o = value; }
public Class<? extends Object> getType() { return o.getClass(); }
public <T> T value() {
return (T) o; // <-- uses type parameter to cast
}
}
public static void main(String[] args) {
Union union = new Union("foo");
Class<?> valueType = union.getType();
if (valueType.equals(String.class)) {
String s = union.value(); // <-- the call
System.out.println(s);
}
}
これは、タイプ「T」の値を返す一般的なメソッドです。メソッドシグネチャの前の ' 'は、' T'がこのメソッドの型パラメータであり、それを所有するクラスではないことを示しています。 –
dasblinkenlight
それは呼び出し側が要求するもので、a)常にスローされます。b)常にnullが返されます。c)悪いハックです。 –
@Louis Wassermanそれでは、基本的には、呼び出し元に型を決定するために渡します。つまり、基本的に型が安全ではありません。あれは正しいですか?それは今まで役に立ちましたか? –