JavaジェネリックTとオブジェクト 質問する

JavaジェネリックTとオブジェクト 質問する

次の 2 つのメソッド宣言の違いは何だろうと思いました。

public Object doSomething(Object obj) {....}

public <T> T doSomething(T t) {....}

片方ではできて、もう片方ではできないことはありますか? この質問はこのサイトの他の場所では見つかりませんでした。

ベストアンサー1

コンテキストから分離 - 違いはありません。 と の両方でtobjのメソッドのみを呼び出すことができますObject

しかし、コンテキストによっては、ジェネリック クラスがある場合:

MyClass<Foo> my = new MyClass<Foo>();
Foo foo = new Foo();

それから:

Foo newFoo = my.doSomething(foo);

オブジェクトと同じコード

Foo newFoo = (Foo) my.doSomething(foo);

2つの利点:

  • キャストの必要はありません(コンパイラがこれを隠します)
  • コンパイル時の安全性が機能します。Objectバージョンを使用すると、 メソッドが常に を返すかどうかはわかりませんFoo。 が返される場合Bar、実行時に になりますClassCastException

おすすめ記事