次の 2 つのメソッド宣言の違いは何だろうと思いました。
public Object doSomething(Object obj) {....}
public <T> T doSomething(T t) {....}
片方ではできて、もう片方ではできないことはありますか? この質問はこのサイトの他の場所では見つかりませんでした。
ベストアンサー1
コンテキストから分離 - 違いはありません。 と の両方でt
、obj
のメソッドのみを呼び出すことができます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
。