1 / 10

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.

jera
Télécharger la présentation

Item gennemgang

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 Item gennemgang

  2. Considerstaticfactorymethodsinstead 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. AlwaysoverridehashCodewhenyouoverrideequals public static void main(String[] args) { Map<Person, String> map = new HashMap<Person, String>(); 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 Subersubtype 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<Type1> hverken subtype eller supertype til List<Type2>. • Erasure: Kender og gennemtvinger deres elementer ved compile-time // Fails at runtime! Object[] objectArray = new Long[1]; objectArray[0] = "I don'tfit in"; //ThrowsArrayStoreException // Won'tcompile! List<Object> ol = newArrayList<Long>(); //incompatible types ol.add("I don'tfit in");

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

  6. Useoverloadingjudiciously Fjerner element i set.remove(i) list.remove(i) Fjerner element med indeksering i list.remove((Integer) i) Fjerner element i af type Integer Bare fordi du kan overloade, betyder ikke at du skal Ved brug af overloading sørg for at • ... de overloadedemetoderharforskelligeantalparametre • ... de erumodetagelige for sammetyper • ... de giver sammeresultat

  7. Design and document for inheritanceorelseprohibit 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: • Thisimplementation…” • Test ved at skrive sub-klasser • Forbyd: • Erklær klassen for ”final” • Lav ”public staticfactories” i stedet for konstruktorer

  8. UseEnumMapinstead of ordinalindexing • 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 Primitive: int, double, long Boxed primitive: Integer, Double, Long Integeri1= newInteger(42); Integeri2 = newInteger(42); Integeri3; booleanb1 = (i1< i2); // false booleanb2= (i1== i2); // false booleanb3= (i3 < 55); // NullPointerException

  10. Useexceptionsonly for exceptionalconditions Exeptions er KUN til exceptionalconditions 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 (ArrayIndexOutOfBoundsExceptione) { }

More Related