Lasse Reichstein Nielsen skrev:
> Mads Bahrt <mads_bahrt@hotmail.com> writes:
> > Hvis man kigger i Java 1.4.2 javadoc'en for Collection interfacet (
> >
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html )
> > vil man se at det interface eksisterede inden generics, så det er
> > derfor du selv er nødt til at oplyse typen.
>
> Det er ikke kun fordi interfacet er ældre. Du ville heller ikke
> kunne gøre det i et nyt interface, fordi generics er et compile-time
> typesystem. På runtime, hvor arrayet skal instantieres, findes
> typeinformationen slet ikke, så det bedste man kan gøre er at lave
> et Object[], med mindre brugeren fortæller noget andet.
Jeg var i dag til et foredrag med Peter von der Ahe om features i Java
5.0 - ret spaendende i oevrigt. I pausen snakkede jeg lidt med ham om
generics og bl.a. ovenstaaende. Et andet eksempel af lignende karakter,
er hvis man selv vil implementere en generisk data type. F.eks.:
public class Stack<E> {
private static final int CAPACITY = 10;
private E[] = new E[CAPACITY];
... metoder ...
}
Man kan maaske undres, men ovenstaaende er ikke muligt - man skal i
stedet bruge Object og benytte casts de rette steder. Grunden i oevrigt
ret logisk, og den samme som Lasse skriver ovenfor. Pga. type erasing
kan typen ikke bestemmes runtime. Der bliver gemt meta-information om
generics i class-filen til compileren, men virtual machine benytter sig
ikke af denne information. Den stoerste grund at man skal vaere
bagudkompatibel med 1.4.2. Peter von der Ahe havde i oevrigt den
holdning, at generics er indfoert for applikations programmoerernes
skyld - ikke for de tekniske, der implementerer algoritmer,
datastrukturer o.lign., hvilket nok er grunden til at man ikke har
lavet denne runtime feature. Der vil heller ik vaere udsigt til at den
kommer i 6.0 - maaske i 7.0, hvor der muligvis kommer en ny byte-code
struktur, men ikke noget han kan sige helt fast. Som han siger:
Generics hjaelper allerede den stoerste del af vejen med dumme
programmoerfejl i den form de er i nu.
I oevrigt vildt hvad Java 5.0 er i stand til med ikke-synkroniserede og
alligevel thread-safe datastrukturer!
Mvh.
Bjarke W.