@Test
public void TypeInferenceTest() {
inference();
uncheckedAssignment();
explicit();
}
private void inference() {
ArrayList<String> strings = new ArrayList<>();
strings.add("abc");
String s = strings.get(0);
assertThat(s, is("abc"));
}
private void uncheckedAssignment() {
ArrayList<String> strings = new ArrayList();
strings.add("abc");
String s = strings.get(0);
assertThat(s, is("abc"));
}
private void explicit() {
ArrayList<String> strings = new ArrayList<String>();
strings.add("abc");
String s = strings.get(0);
assertThat(s, is("abc"));
}
上記のコードでは、リストをインスタンス化するために、型推論、オープン ジェネリック型、クローズ ジェネリック型の 3 つの方法を使用しました。
しかし、生成されたバイトコードを JD-GUI を使用して逆コンパイルすると、次のようになります。
@Test
public void TypeInferenceTest() {
inference();
uncheckedAssignment();
explicit();
}
private void inference() {
ArrayList strings = new ArrayList();
strings.add("abc");
String s = (String)strings.get(0);
Assert.assertThat(s, Matchers.is("abc"));
}
private void uncheckedAssignment() {
ArrayList strings = new ArrayList();
strings.add("abc");
String s = (String)strings.get(0);
Assert.assertThat(s, Matchers.is("abc"));
}
private void explicit() {
ArrayList strings = new ArrayList();
strings.add("abc");
String s = (String)strings.get(0);
Assert.assertThat(s, Matchers.is("abc"));
}
彼らは同じバイトボットを生成したようです。
では、いつ、なぜ他の 2 つの代わりに型推論を使用する必要があるのでしょうか?