Pessoa,
Alguém poderia me explicar o sentido de criar um atributo assim:
private List<?> garantias;
E como eu poderia usa-lo ?
Obrigado ! :-o
Pessoa,
Alguém poderia me explicar o sentido de criar um atributo assim:
private List<?> garantias;
E como eu poderia usa-lo ?
Obrigado ! :-o
O “?” funciona como um curinga. Ele diz que pode ser qualquer tipo e pode ser usado em conjunto com “extends” ou “super”.
Com extends, será aceito qualquer tipo que herde o informado (<? extends Number> irá aceitar , , etc.).
Com super, será aceito qualquer superclasse ou interface do informado (<? super Method> irá aceitar , , , etc.).
Usar somente o “?” é o mesmo que usar “? extends Object”.
Criar um atributo com o “?” significa dizer que você não sabe ao certo o tipo dos elementos da lista. É quase o mesmo que declarar somente List (quase o mesmo porque há casos de erros de compilação chatos caso use o “?”).
O “?” funciona como um curinga. Ele diz que pode ser qualquer tipo e pode ser usado em conjunto com “extends” ou “super”.Com extends, será aceito qualquer tipo que herde o informado (<? extends Number> irá aceitar , , etc.).
Com super, será aceito qualquer superclasse ou interface do informado (<? super Method> irá aceitar , , , etc.).
Usar somente o “?” é o mesmo que usar “? extends Object”.
Criar um atributo com o “?” significa dizer que você não sabe ao certo o tipo dos elementos da lista. É quase o mesmo que declarar somente List (quase o mesmo porque há casos de erros de compilação chatos caso use o “?”).
Pode colocar um exemplo de uso, por favor.
Não há sentido nenhum em criar um atributo assim.
Há sentido em criar métodos que recebam parâmetros desse tipo.
Por exemplo:
public void imprimir(List<?> objetos) {
for (Object o : objetos) {
System.out.println(o.toString());
}
}
Isso aceita como entrada uma List<String> ou uma List<SuaClasse>. O ? indica que tanto faz o tipo da lista. Você ainda poderia restringir. Por exemplo:
public static void ordena(List<? extends Carro> lista, Comparator<? super Carro> comparador) {
Collections.sort(lista, comparador);
}
Esse método aceita qualquer um List<Carro> ou um List de um tipo filho de carro, como um List<Fusca> no primeiro parâmetro. E no segundo, aceita um comparador de Carro ou de qualquer classe que seja pai de carro, como Comparator<<Veiculo>>.