Vídeo: Aprenda como utilizar o CONT.SE e CONT.SES 2024
Java é uma ótima maneira de programar, mas às vezes você precisa se tornar criativo. Para fazer isso, você pode usar parâmetros do tipo curinga. Suponha que você tenha um método que seja declarado assim:
public void addItems (lista ArrayList)
{
// corpo do método não mostrado
}
Pergunta do pensamento: a compila da seguinte declaração?
addItems (novo ArrayList ());
Resposta: Não.
Isso é surpreendente porque
String
é um subtipo de
Objeto
. Então, você pensaria que um parâmetro que diz que aceita um
ArrayList
de objetos aceita uma
ArrayList
de strings.
Infelizmente, a herança não funciona dessa maneira quando se trata de parâmetros de tipo formal. Em vez disso, você precisa usar outro recurso de genéricos, chamado curingas.
Em resumo, se você deseja criar um método que aceite qualquer tipo de
ArrayList
, você deve codificar o método como este:
public void addItems (lista ArrayList)
Neste caso, o ponto de interrogação indica que você pode codificar qualquer tipo de tipo aqui.
Isso é quase tão bom quanto a herança, mas e se você quiser realmente limitar o parâmetro às coleções de uma superclasse específica? Por exemplo, suponha que você esteja trabalhando em um sistema de folha de pagamento que tenha uma superclasse
Employee
com duas subclasses
HourlyEmployee
e
SalariedEmployee
e você quer que esse método aceite um
ArrayList
de objetos
Employee
,
HourlyEmployee
, ou
SalariedEmployee
objetos?
Nesse caso, você pode adicionar uma cláusula
se estende
ao curinga, assim:
public void addItems (lista ArrayList)
Então você pode chamar a Método
addItems
com uma
ArrayList
do tipo
Empregado
,
HourlyEmployee
ou
SalariedEmployee
.
Agora, antes de chamá-lo um dia, tire este exemplo um passo adiante: suponha que este
addItems
método aparece em uma classe genérica que usa um parâmetro de tipo formal
para especificar o tipo de elementos o A classe aceita e você deseja que o método
addItems
aceite um
ArrayList
do tipo
E
ou qualquer uma das suas subclasses. Para fazer isso, você declararia o método
addItems
como este:
public void addItems (lista ArrayList)
Aqui o parâmetro de tipo curinga
significa simplesmente que o
ArrayList < pode ser do tipo
E
vor qualquer tipo que se estenda
E
.