46

私はこの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?

4

5 に答える 5

20

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

于 2013-04-08T20:47:10.153 に答える