持ってこのような一般的な方法:T
はObject
、その上限に退化するので、あなたがこの方法には何もして渡すことができます:
<T> void assertEquals(T expected, T actual) { /* ... */ }
はあなたのタイプとは異なり、比較回避するために、何の型の安全性を付与するものではありません
assertEquals("string", 0); // Compiles fine, even though they can't be equal.
Ideone demo
とNORあなたがexpected
上の任意のメソッドを使用することができますし、 actual
はObject
に見つかりません。したがって、T
は基本的にはちょうどObject
です。
このように、ジェネリックスを追加すると実装が複雑になります。
さて、あなたはこのようなクラス定義することができます。
class GenericAssert<T> {
void assertEquals(T expected, T actual) { /* ... */ }
}
を、あなたはこのように使用できます。
new GenericAssert<String>().assertEquals("string", 0); // Compiler error.
あなたが今により厳しい上限を配置したので、クラスレベルでassertEquals
の許容可能なパラメータ。
しかし、ちょっと気分が悪いです。
ダウンリストの理由をご記入ください。 –
ジェネリック薬はあなたに何を与えるのですか? [なぜこの質問への私の答え](http://stackoverflow.com/a/38475261/3788176)を参照してください。 –
@AndyTurner私は誤って2つの異なるタイプのオブジェクトを比較しないようにしていますが、これはとにかく無効です。 IDEはスコープ内のすべての既存オブジェクトのリストを表示するのではなく、そのメソッドで渡すことができる引数についてより良い提案をします。 –