Ich bin auf eine merkwürdige Situation mit statischen generischen Methoden gestoßen. Dies ist der Code:
class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}
class Bar<E>
{
private Foo<E> member;
public Bar()
{
member = Foo.createFoo();
}
}
Wie kommt es, dass ich im Ausdruck keine Typargumente angeben muss Foo.createFoo()
? Ist das eine Art Typinferenz? Wie kann ich das Typargument angeben, wenn ich explizit darauf eingehen möchte?
java
generics
static
type-inference
Fredoverflow
quelle
quelle
Antworten:
Ja, dies ist eine Typinferenz basierend auf dem Ziel der Zuweisung gemäß JLS-Abschnitt 15.12.2.8 . Um explizit zu sein, würden Sie so etwas nennen wie:
quelle
Foo.<E>createFoo();
Danke :)Foo.createFoo();
kompiliert ...? Liegt das an der Typlöschung?E
wird "abgeleitet", umObject
E
, besteht darincreateFoo()
, ein Argument vom Typ zu definierenClass<E>
(so wie es wärecreateFoo(Class<E> type)
) und es mitcreateFoo(String.class)