私はこの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、これは悪い習慣です。これがジェネリックの発明の理由でした。