Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertAina Gabrielsen Endret for 9 år siden
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.
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.