Scava


Während der Aufruf von Java-Code aus Scala meist recht unproblematisch ist, sieht es bei der Gegenrichtung nicht ganz so gut aus. Deshalb habe ich beschlossen, eine Java-Bibliothek zu schreiben, die den Aufruf von Scala-Code erleichtert. Ich habe das Projekt „Scava“ getauft.

Was bietet nun Scava? Die meisten Klassen sind Utility-Klassen, die über statische Member und Methoden Scala-Funktionalität zur Verfügung stellen. Ein Beispiel: Wenn man für einen Scala-Aufruf ein Ordering braucht, kann man ord.scava.math.Orderings importieren, das so aussieht:

 
public class Orderings {

    public static Ordering$ ORDERING = Ordering$.MODULE$;
    public static Ordering<Object> UNIT_ORDERING = scala.math.Ordering$Unit$.MODULE$; //???
    public static Ordering<Boolean> BOOLEAN_ORDERING = scala.math.Ordering$Boolean$.MODULE$;
    public static Ordering<Byte> BYTE_ORDERING = scala.math.Ordering$Byte$.MODULE$;
    public static Ordering<Character> CHAR_ORDERING = scala.math.Ordering$Char$.MODULE$;
    ... weitere statische Member ...

    public static <T> Ordering<T> fromLessThan(Function2<T, T, Boolean> cmp) {
        return ORDERING.<T>fromLessThan(cmp);
    }

    public static <T, S> Ordering<T> by(Function1<T, S> f, Ordering<S> ord) {
        return ORDERING.by(f, ord);
    }

    public static <T> Ordering<Option<T>> optionOrdering(Ordering<T> ord) {
        return ORDERING.<T>Option(ord);
    }

    ... weitere Methoden, z.B. für Tupel ...
}

Damit hat man also für viele Fälle schon die richtige Ordering. Die meisten Scava-Klassen sehen ähnlich aus.

Weiterhin bietet Scava Hilfe beim Implementieren von Funktionen. Da Function0 u.s.w. Traits sind, und Function1 und Function2 darüber hinaus auch noch spezialisiert (mit @specialized), ist es nämlich gar nicht so einfach, diese ordentlich in Java zu implementieren. Dafür bietet Scava die abstrakten Klassen F0, F1 u.s.w., bei denen schon „alles dran“ ist, außer der apply-Methode.

Natürlich ist das Projekt noch in der Anfangsphase. Für jede Art von Hilfe, Ideen, Testberichte, Unit-Tests und konstruktive Kritik wäre ich dankbar.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s