1. ホーム
  2. java

[解決済み] Javaジェネリックス T vs Object

2022-04-28 23:29:19

質問

以下の2つのメソッド宣言の違いは何でしょうか?

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

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

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

どのように解決するのですか?

コンテキストから切り離される - 違いはありません。両方において 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 , 実行時に