Typen und Typklassen

In Haskell sind diese drei Dinge unabhängig

  1. Deklaration einer Typklasse (= Deklaration von abstrakten Methoden) class C where { m :: ... }
  2. Deklaration eines Typs (= Sammlung von Konstruktoren und konkreten Methoden) data T = ...
  3. Instanz-Deklaration (= Implementierung der abstrakten Methoden) instance C T where { m = ... }
In Java sind 2 und 3 nur gemeinsam möglich class T implements C { ... }

Das ist an einigen Stellen nachteilig und erfordert Bastelei: wenn class T implements Comparable<T>, aber man die T-Objekte anders vergleichen will?

Man kann deswegen oft die gewünschte Vergleichsfunktion separat an Sortier-Prozeduren übergeben.

...natürlich nicht die Funktion selbst, Java ist ja nicht funktional, sondern ihre Verpackung als Methode eines Objekts einer Klasse, die

interface Comparator<T> 
   { int compare(T o1, T o2); }
implementiert.



Johannes Waldmann 2010-01-25