私はこのJavaコードを持っています。
public <T> T readObjectData(ByteBuffer buffer, Class<T> type) {
...
T retVal = (T) summaries;
return retVal;
このコードをどのように解釈しますか? public <T> T
の代わりになぜ必要なのpublic T
ですか?
第2引数( )にパラメータを与える方法はClass<T> type
?
<T>
パラメータクラスです。という名前のクラスはありませんT
。このメソッドは、 という名前の 2 番目のメソッド引数で指定された任意のクラスで使用できますtype
。
メソッドは次のように定義されているため:
public <T> T readObjectData(ByteBuffer buffer, Class<T> type)
以下のように呼び出すことができます。
MyClass obj = o.readObjectData(buffer, MyClass.class);
readOjectData()
の戻り値をtoにキャストする必要がないことに注意してくださいMyClass
。昔々、Java 5 より前は、このメソッドは次のように定義されていました。
public Object readObjectData(ByteBuffer)
そしてその使用法は次のようになりました:
MyClass obj = (MyClass)o.readObjectData(buffer);
キャストによって引き起こされる可能性があるためClassCastException
、これは悪い習慣です。これがジェネリックの発明の理由でした。