Az osztályokat lehet típussal paraméterezni. Ennek két
fajtája van: a megszorításos és a
megszorítás nélküli.
A megszorítás nélküli generic esetén a típus tetszőleges lehet.
Példa:
class Stack<ELEM_TYPE> is
internal
var
st: Array<ELEM_TYPE>
interface
...
routines
push (elem: ELEM_TYPE) is
== az elemert betesszuk a verembe
pop-> (elem: ELEM_TYPE) is
== a verem tetejet kivesszuk es az elembe tesszuk
end class
class client
uses Stack, Figure
internal
var
s1: Stack<Integer>
s2: Stack<Figure>
f: Figure
...
s1.push(42)
s1.push(f)
end class
A generic osztályon belül (itt a Stack) a formális
generic paraméter (ELEM_TYPE) megengedett típus.
Használható változók, paraméterek és visszatérési értékek deklarációjára.
Egy osztálynak több generic paramétere is lehet. A példányosításnál az
aktuális generic paraméterek száma meg kell egyezzen az osztály fejlécében
lévő azonosító listával, azaz a formális generic paraméterek számával.
Példa:
class List<T1,T2> is
...
end class
class client
uses List
internal
var l: List<String,Integer>
...
end class
A
megszorításos generic esetén a típusra valamilyen
megkötést adunk, például, hogy valamilyen osztály alosztálya kell, hogy legyen:
Példa:
class List<T is Comparable> is
...
end class
Ebben a példában a
List osztályt csak a
Comparable osztály alosztályával lehet paraméterezni.
A
Comparable osztály műveletei a
List osztályon belül használhatók a
T típusú változókra.