Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.

Lignende præsentationer


Præsentationer af emnet: "Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays."— Præsentationens transcript:

1 Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays  Item: 33 – EnumMap instead of indexing  Item: 41 – Overloading  Item: 49 – Primitive type over boxed primitive  Item: 57 – Exceptions for exceptional use

2 Consider static factory methods instead of constructors Public static factory metoder Returnerer en instans af klassen Kan bruges som supplement til, eller erstatning for constructors Fordele De kan have logiske navne De behøver ikke at oprette/la ve et nyt objekt af klassen (ulig constructors) Kan returnerer en hvilken som helst subtype af den egentlige return type Ulemper Klassen kan ikke være en supertype hvis den udelukkende har static fectory metoder De er ikke på samme måde synlige i API dokumentationen som constructors private Gøgler (String navn) { this.navn = navn; } Public static Gøgler getInstance(String navn) [ return instance == null ? Instance = new Gøgler(navn): instance; }

3 Always override hashCode when you override equals public static void main(String[] args) { Map map = new HashMap (); Person p1 = new Person("Mikkel", "Hansen"); map.put(p1, "88888888"); // Printer 88888888 System.out.println(map.get(p1)); // Printer null, hvis hashcode ikke bliver overridet System.out.println(map.get(new Person("Mikkel", "Hansen")));} public static void main(String[] args) { Map map = new HashMap (); Person p1 = new Person("Mikkel", "Hansen"); map.put(p1, "88888888"); // Printer 88888888 System.out.println(map.get(p1)); // Printer null, hvis hashcode ikke bliver overridet System.out.println(map.get(new Person("Mikkel", "Hansen")));} public int hashCode() { int result = 16; result = 31 * result + (null == firstName ? 0 : firstName.hashCode()); result = 31 * result + (null == lastName ? 0 : lastName.hashCode()); return result;}

4 Prefer lists to arrays Arrays Covariant: Hvis Suber subtype af Super, så er Sub[ ] subtype af Super[ ] Refied: Kender og gennemtvinger deres element typer ved run-time. Generics(Lists) Invariant: For distinktive typer Type1 og Type2 er List hverken subtype eller supertype til List. Erasure: Kender og gennemtvinger deres elementer ved compile-time // Fails at runtime! Object[] objectArray = new Long[1]; objectArray[0] = "I don't fit in"; //Throws ArrayStoreException // Won't compile! List ol = new ArrayList (); //incompatible types ol.add("I don't fit in");

5 Prefer lists to arrays Ulovlige generic arrays, som alle vil give geenric array creation error ved compile-time new List new List [ ] new E[ ] Ulovligt at skabe et generic array, da det ikke er type safe. // Why generic array creation is illegal - Won't compile! List [] stringLists = new List [1];// (1) List intList = Arrays.asList(42);// (2) Object[] objects = stringLists;// (3) objects[0] = intList;// (4) String s = stringLists[0].get(0);// (5)

6 Use overloading judiciously set.remove(i) list.remove(i) Fjerner element i Fjerner element med indeksering i list.remove((Integer) i) Fjerner element i af type Integer... de overloadede metoder har forskellige antal parametre... de er umodetagelige for samme typer... de giver samme resultat Ved brug af overloading sørg for at Bare fordi du kan overloade, betyder ikke at du skal

7 Design and document for inheritance or else prohibit it Farlig situation: En metode i klassen bruger en anden metode der kan overrides Ikke altid tydeligt hvordan de forskellige metoder bruger hinanden. Design og dokumenter: This implementation…” Test ved at skrive sub-klasser Forbyd: Erklær klassen for ”final” Lav ”public static factories” i stedet for konstruktorer

8 Use EnumMap instead of ordinal indexing Dårligt Brug ikke et array til at repræsentere Enum typer. int har ikke den samme type sikkerhed som Enum. Godt Brug EnumMap Er ligeså hurtig som et array Der indexeres med Enum direkte

9 Prefer primitive types to boxed primitives Integer i1 = new Integer(42); Integer i2 = new Integer(42); Integer i3; boolean b1 = (i1 < i2); // false boolean b2 = (i1 == i2); // false boolean b3 = (i3 < 55); // NullPointerException Primitive: int, double, long Boxed primitive: Integer, Double, Long

10 Use exceptions only for exceptional conditions Exeptions er KUN til exceptional conditions Brug dem aldrig til at ”optimere”. // Horrible abuse of exceptions. Don't ever do this! try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { }


Download ppt "Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays."

Lignende præsentationer


Annoncer fra Google