Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.

Liknende presentasjoner


Presentasjon om: "Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata."— Utskrift av presentasjonen:

1 Introduksjon til Java 5.0

2 Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata Enum typer Import av statiske funksjoner Formatert I/O (tilsvarende C++ printf) Variabelt antall argumenter

3 Generiske typer Før: collections opererer på objekter av typen Object Må typecaste det som kommer ut Kompilator sjekker ikke for typer Nå: Kan spesifisere en type til en collection Dette collection objektet godtar kun objekter av riktig type Kompilatoren sjekker typen Trenger ikke å typecaste Spesifiseres med syntaks: ArrayList

4 Fordeler med Generiske Typer Garanterer at returverdier er av den angitte typen (Trenger ikke å typecaste ved uttak) ArrayList strengliste;... String s = strengliste.get(0); Typesjekking ved kompilering Før: ClassCastException ved kjøretid under uttak Nå: strengliste.add(new Integer(5)) ulovlig Ser derfor bedre hvor feilen skjer

5 Generiske Typer og Arving 1/2 Generiske typer kan subklasses som normalt ArrayList subklasse av List Generiske typer med ulike typeparametre regnes som ulike typer ArrayList forskjellig fra ArrayList

6 Generiske Typer og Arving 2/2 G og G er urelaterte selv om B er subklasse av A! List ls = new ArrayList (); //1: OK List lo = ls; // 2: Ikke OK! lo.add(new Object()); // 3 String s = ls.get(0); // 4: attempts to assign an Object to a String!

7 Supertyper for Generiske Typer 1/2 Ønsker å lage en metode som funker uansett typeparameter Eksempel: Metode for å skrive ut innholdet Første forsøk: void printCollection(Collection c) { for (Object e : c) { System.out.println(e);}} Denne vil bare fungere for en Collection og ikke for andre collections!

8 Supertyper for Generiske Typer 2/2 Trenger ny formalisme: void printCollection(Collection c) { for (Object e : c) { System.out.println(e);}} indikerer en hvilken som helst type Kan ta ut men ikke legge inn (fordi den faktiske typen er ukjent) Mer generelt: Kan bruke returverdi men ikke sende inn parametre til metoder

9 Begrensete Ukjente Typer Ønsker å kalle spesifikk funksjon på objektene som kommer ut Eksempel: contains funksjonen for en Shape for å sjekke om et oppgitt punkt er inne i den. public void findContainingShapes(Point p, List shapes) {... } Kan ha flere begrensninger

10 Generiske Metoder Ønsker å skrive metode som jobber med generiske typer Kan erklære en metode som generisk Bruker følgende syntaks static void fromArrayToCollection(T[] a, Collection c) { for (T o : a) { c.add(o); // correct }} Trenger ikke å oppgi typen i kallet siden den kan utledes av kompilatoren. Brukes hvis returverdi eller andre parametre er avhengige av T (ellers brukes wildcards)

11 For-løkke med iterator Brukes for å gjøre en operasjon på alle medlemmene av en collection Før: ArrayList list = new ArrayList (); Integer sum; for (Iterator i = list.iterator(); i.hasNext();) { Integer value=(Integer)i.next(); sum = sum + value.intValue(); } Nå: ArrayList list = new ArrayList (); for (Integer i : list) { sum = sum + i.intValue(); }

12 Automatisk innpakking av primitive typer Java konverterer automatisk mellom primitive typer og innpakningstyper Før: ArrayList list = new ArrayList (); list.add(0, new Integer(42)); int total = (list.get(0)).intValue(); Nå: ArrayList list = new ArrayList (); list.add(0, 42); int total = list.get(0);

13 Metadata Kan oppgi annotasjoner (metadata) med metoder Kan lage programmer som prosesserer annotasjonene Kan lage nye filer

14 Metadata eksempel: @remote Før: public interface PingIF extends Remote { public void ping() throws RemoteException;} public class Ping implements PingIF { public void ping() {... }} Nå (med prosesseringsprogram): public class Ping { public @remote void ping() {... }} APT Annotation Processing Tool Skriv klasser for å behandle annotasjonene

15 Enum typer Man kan nå lage en type som har en oppgitt liste av verdier public enum StopLight { red, amber, green }; StopLight s = StopLight.red; Kan bruke nullverdier

16 Import av statiske medlemmer Man kan nå importere statiske medlemmer av en klasse med import static Eksempel: import static java.lang.Math.*; Etter denne setningen kan man skrive ”PI” i stedet for ”Math.PI”.

17 Formatert I/O Utskrift String user; int total; System.out.printf("name count%n"); System.out.printf("%s %5d%n", user,total); Innlasting Scanner s= new Scanner(System.in); String param= s.nextLine(); int value=s.nextInt(); s.close();

18 Printf Format Beskrivelser %dDesimalt heltall %xHeksadesimalt heltall %fFlyttall med fast komma %eFlyttall med eksponentialnotasjon %gGenerelt flyttall (den korteste av f og e) %aHeksadesimalt flyttall %s Streng %cEnkelttegn %bBoolsk verdi

19 Variabelt Antall Argumenter Enkelte metoder (som f.eks. printf) tar et variabelt antall argumenter Erklæres med følgende syntaks Void enMetode(Object... args) { } Parameteren ”args” behandles som en array i metoden

20 Mer Generics – Hvordan Bruke Gammel Kode Rå type – Generic objekt uten typeparameter Collection = Collection Mister typesikkerheten Laget sånn fordi det må være slik for at ny kode skal kunne bruke gammel kode Genererer unchecked warning

21 Hvordan Generics er Implementert Generics eksisterer bare i kompilatoren Virtual Machine ser ikke generics Kompilator konverterer Collection til Collection og setter inn typecasts hvor nødvendig Typevariable blir konvertert til øverste grense Object for ubegrensete typevariable Årsak: Gjør tilbakekompatibilitet enklere

22 Konsekvenser av Implementeringa Alle instanser av en generisk klasse Bruker den samme.class fila Har samme type ved kjøretid instanceOf kan ikke sjekke typeparametre Casts med typeparametre lager unchecked advarsler Kan ikke lage array objekter med elementer med typeparameter

23 Array Eksempel List [] lsa = new List [10]; // not really allowed Object o = lsa; Object[] oa = (Object[]) o; List li = new ArrayList (); li.add(new Integer(3)); oa[1] = li; // unsound, but passes run time store check String s = lsa[1].get(0); // run-time error - ClassCastException

24 Øving 1 – Bruk av Generiske Typer Idrettsresultater Skal skrive inn X antall resultater Resultatene er positive flyttall Avslutt med et negativt tall Programmet skal så skrive ut Gjennomsnittet For hver utøver: hvor mye han/hun er over snittet

25 Øving 2 – Skriv Generisk Metode Lag en statisk metode som tar inn et Pair av en type som implementerer Comparable Metoden skal ordne paret slik at det minste elementet er først.

26 Øving 3 – Skriv Subklasse til Generisk Type Skriv en subklasse til Pair som er uordnet, dvs at Pair(”A”, ”B”) er lik Pair(”B”, ”A”) i følge equals metoden

27 Øving 4 – Avansert Generisk Metode Skriv en metode som sorterer en vilkårlig sorterbar collection med MergeSort algoritmen.


Laste ned ppt "Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata."

Liknende presentasjoner


Annonser fra Google