De flesta programspråk (även Java) tillåter att man deklarerar en
array av int
, en array av String
eller en array av någon annan
datatyp. Hur det data som lagras i arrayen ska se ut anges med nånting
som kan beskrivas som en slags typ-parameter.
I Java går man ett steg längre: istället för att bara kunna använda typ-parametrar i någon enstaka fördefinierad typ är det här möjligt att definiera nya typer som tar parametrar.
Generiska typer kom med Java 5. Läroböcker för tidigare versioner av Java nämner inte dem.
Vi börjar med ett enkelt exempel.
I detta exempel definierar jag en klass Box
. Klassen representerar en
"låda" som kan lagra värden av godtycklig typ. Typ-parametern (X
)
anger vilken typ av data som lagras.
public class Box<X> { private X x; public X getX() { return x; } public void setX (X x0) { x = x0; } }
Ett enkelt testprogram som använder klassen Box
för att lagra en
sträng och ett heltal.
public static void main (String [] arg) { Box<String> b = new Box<String> (); b.setX("Foo"); String s = b.getX(); System.out.println(s); Box<Integer> c = new Box<Integer> (); c.setX(42); int i = c.getX(); System.out.println(i); }
Jag beskriver autobox/unboxing i avsnitt 4.3.
Även metoder kan definieras med en typ-parameter. Vi kommer inte att använda denna möjlighet i kursen, men nedan följer ett mycket enkelt exempel.
class Id { public static <T> T id(T x) { return x; } }