Удобный способ использования java-интерфейса Function из scala?

Здесь на работе большинство людей используют Java, а я работаю со Scala. Мы решили собрать несколько общих классов в библиотеке, которая будет написана на Java. Теперь я хочу добавить псевдофункциональное программирование в библиотеку. Взгляните на следующее:

java:

public interface Func<A, R> {
    public R f(a A);
}

public AClass {
    public <R> ArrayList<R> myMethod(
                             Func<String, R> func
    ) {
        // ...
    }
}

использование в java:

AClass ac = new AClass();
ArrayList<String> al = ac.myMethod(
                            new Func<String, String> (
                                public String f(String s) {
                                    return s + "!";
                                }
                            })

Вышеупомянутое не совсем завершается (на самом деле скорее пугающе, из Scala в перспективе). Есть ли способ вызвать некоторую магию scala, чтобы иметь возможность делать что-то вроде следующего в scala:

var ac = new ACLass
var al = ac.myMethod(str => str + "!")             // alternative 1
al = ac.myMethod { case: str:String => str + "!" } // alternative 2

Я некоторое время возился с имплицитами, но не мог разобраться = P.

5
задан Michael J. Barber 20 September 2011 в 07:26
поделиться