Saya telah menjumpai situasi aneh yang melibatkan metode generik statis. Ini kodenya:
class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}
class Bar<E>
{
private Foo<E> member;
public Bar()
{
member = Foo.createFoo();
}
}
Kenapa saya tidak harus menentukan argumen tipe apa pun dalam ekspresi Foo.createFoo()
? Apakah ini semacam jenis inferensi? Jika saya ingin menjelaskannya secara eksplisit, bagaimana saya dapat menentukan argumen type?
java
generics
static
type-inference
fredoverflow
sumber
sumber
Jawaban:
Ya, ini adalah jenis inferensi berdasarkan target penugasan, sesuai JLS bagian 15.12.2.8 . Untuk lebih jelasnya, Anda akan menyebut sesuatu seperti:
sumber
Foo.<E>createFoo();
Terima kasih :)Foo.createFoo();
terkompilasi dengan baik ...? Apakah ini karena penghapusan tipe?E
"disimpulkan" menjadiObject
E
adalah dengan mendefinisikancreateFoo()
take an argument of typeClass<E>
(jadi akan demikiancreateFoo(Class<E> type)
), dan menyebutnya dengancreateFoo(String.class)