Video: Web Programming - Computer Science for Business Leaders 2016 2025
Java er en fin måte å programmere på, men noen ganger må du bli kreativ. For å gjøre dette kan du bruke wildcard-type parametere. Anta at du har en metode som er erklært som denne:
offentlig ugyldig addItems (ArrayList-liste)
{
// metodekjede ikke vist
}
Tankegruppe: Utarbeider følgende setning?
addItems (new ArrayList ());
Svar: Nei.
Det er overraskende fordi
String
er en undertype på
Objekt
. Så du tror at en parameter som sier at den aksepterer en
ArrayList
av objekter, aksepterer en
ArrayList
av strenger.
Dessverre virker arv ikke helt på den måten når det gjelder formelle parametere. I stedet må du bruke en annen funksjon av generikk, kalt jokertegn.
Kort sagt, hvis du vil opprette en metode som aksepterer alle typer
ArrayList
, må du kodes metoden slik:
public void addItems (ArrayList list)
I dette tilfellet indikerer spørsmålet at du kan kode noe som helst her.
Det er nesten like bra som arv, men hva om du faktisk vil begrense parameteren til samlinger av en bestemt superklasse? For eksempel, anta at du jobber med et lønnsystem som har en
Medarbeider
superklasse med to underklasser med navnet
HourlyEmployee
og
SalariedEmployee
, og du vil at denne metoden skal akseptere en
ArrayList
av
Medarbeidere
objekter,
HourlyEmployee
objekter eller
SalariedEmployee
objekter?
I så fall kan du legge til en
utvider
-klausul til villakortet, slik som dette:
offentlig ugyldig addItems (ArrayList-liste)
Så kan du ringe
addItems
metode med en
ArrayList
av typen
Medarbeider
,
HourlyEmployee
eller
SalariedEmployee
.
Nå, før du kaller det en dag, ta dette eksempelet ett skritt videre: Anta at denne
addItems
-metoden vises i en generisk klasse som bruker en formell type parameter
for å angi hvilken type element klassen aksepterer, og du vil at metoden
addItems
skal akseptere en
ArrayList
av typen
E
eller noen av dens underklasser. For å gjøre det, ville du deklarere
addItems
metoden som følger:
offentlig tomt-addItems (ArrayList-liste)
Her betyr jokertype-parameteren
ganske enkelt at
ArrayList < kan være av typen
E
vor enhver type som strekker seg
E
.
