Java 5 ist mittlerweile weit verbreitet, und Entwickler sollten auf der einen Seite die neuen Spracheigenschaften kennenlernen, auf der anderen Seite sich mit dem Update der Bibliotheken beschäftigen. Als Startlinks gelten:
- http://www.tutego.com/java/java-1.5-neuigkeiten.htm
- http://www.tutego.com/java/java-6-mustang-news.htm
Von jeder neue Klasse und Schnittstelle sollte man zumindest den API-Kopf gelesen haben. Besonderes Augenmerk sollten Entwickler auf Generics legen. Hier gilt hervorzuheben das Tutorial http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf. Die Begriffe
- Generischer Typ
- Typparameter
- formalter Typparameter
- parametrisierter Typ
- Typargument
- Wildcard-Typ
- Bounded Wildcard
- upper bound, lower bound
- generische Methode
- unchecked Warnung
- erasure
- Wildcard capture
- multiple bound
solle man sofort einordnen und beschreiben können.
Jeder Entwickler sollte insbesondere alle Anwendungen von Generics bei der Utility-Klasse Collections verstehen:
static<T> booleanaddAll(Collection<? super T> c, T... a)static<T> intbinarySearch(List<? extends Comparable<? super T>> list, T key)static<T> intbinarySearch(List<? extends T> list, T key, Comparator<? super T> c)static<E> Collection<E>checkedCollection(Collection<E> c, Class<E> type)static<E> List<E>checkedList(List<E> list, Class<E> type)static<K,V> Map<K,V>checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)static<E> Set<E>checkedSet(Set<E> s, Class<E> type)static<K,V> SortedMap<K,V>checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)static<E> SortedSet<E>checkedSortedSet(SortedSet<E> s, Class<E> type)static<T> voidcopy(List<? super T> dest, List<? extends T> src)static booleandisjoint(Collection<?> c1, Collection<?> c2)static<T> List<T>emptyList()static<K,V> Map<K,V>emptyMap()static<T> Set<T>emptySet()static<T> Enumeration<T>enumeration(Collection<T> c)static<T> voidfill(List<? super T> list, T obj)static intfrequency(Collection<?> c, Object o)static intindexOfSubList(List<?> source, List<?> target)static intlastIndexOfSubList(List<?> source, List<?> target)static<T> ArrayList<T>list(Enumeration<T> e)static<T extends Object & Comparable<? super T>> Tmax(Collection<? extends T> coll)static<T> Tmax(Collection<? extends T> coll, Comparator<? super T> comp)static<T extends Object & Comparable<? super T>> Tmin(Collection<? extends T> coll)static<T> Tmin(Collection<? extends T> coll, Comparator<? super T> comp)static<T> List<T>nCopies(int n, T o)static<T> booleanreplaceAll(List<T> list, T oldVal, T newVal)static voidreverse(List<?> list)static<T> Comparator<T>reverseOrder()static<T> Comparator<T>reverseOrder(Comparator<T> cmp)static voidrotate(List<?> list, int distance)static voidshuffle(List<?> list)static voidshuffle(List<?> list, Random rnd)static<T> Set<T>singleton(T o)static<T> List<T>singletonList(T o)static<K,V> Map<K,V>singletonMap(K key, V value)static<T extends Comparable<? super T>> voidsort(List<T> list)static<T> voidsort(List<T> list, Comparator<? super T> c)static voidswap(List<?> list, int i, int j)static<T> Collection<T>synchronizedCollection(Collection<T> c)static<T> List<T>synchronizedList(List<T> list)static<K,V> Map<K,V>synchronizedMap(Map<K,V> m)static<T> Set<T>synchronizedSet(Set<T> s)static<K,V> SortedMap<K,V>synchronizedSortedMap(SortedMap<K,V> m)static<T> SortedSet<T>synchronizedSortedSet(SortedSet<T> s)static<T> Collection<T>unmodifiableCollection(Collection<? extends T> c)static<T> List<T>unmodifiableList(List<? extends T> list)static<K,V> Map<K,V>unmodifiableMap(Map<? extends K,? extends V> m)static<T> Set<T>unmodifiableSet(Set<? extends T> s)static<K,V> SortedMap<K,V>unmodifiableSortedMap(SortedMap<K,? extends V> m)static<T> SortedSet<T>unmodifiableSortedSet(SortedSet<T> s)
PS: Beginne bei <T>/<E> bzw. <K,V>, dann <?> und dann den restlichen. max/min sind dann die Generics-„Bonbons“.
Wer danach die Nase von Generics immer noch nicht voll hat, beginnt http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html zu lesen. Das ist die umfangreichste Quelle zu dem Thema im Netz.