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 2005-06-08