Da this Oracle Java tutorial:Catturare i caratteri jolly in Java generici
L'esempio WildcardError produce un errore di acquisizione quando compilati:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
Dopo questa dimostrazione di errore, che si risolvono il problema utilizzando un metodo di supporto:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
Primo, th ey dire che il parametro lista di input (i
) è visto come un Object
:
In questo esempio, il compilatore elabora il parametro di input
i
come di oggetto.
Perché allora i.get(0)
non restituisce un Object
? se fosse già passato come tale?
Inoltre, che senso ha utilizzare un <?>
quando è necessario utilizzare un metodo di supporto utilizzando <T>
. Non sarebbe meglio utilizzare direttamente T
che può essere dedotto?
Questo è ciò che Eclipse mi dà: 'Il metodo set (int, capture # 1 di?) Nel tipo List Non è applicabile per gli argomenti (int, capture # 2 di ?) "Sembra ancora più ridicolo. –
Ho appena scritto una [risposta] (http://stackoverflow.com/questions/30797805/understanding-a-captured-type-in-java/30798066#30798066) che spiega l'acquisizione di caratteri jolly per un'altra domanda. Questa informazione sembra rilevante anche per questa domanda. – Lii