在工作中,大多数人都使用 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。
使用隐式转换:
object FuncConversions {
implicit def func2function[A,R]( fn: (A) => R ) =
new Func[A,R] {
def f(a: A) = fn(a)
}
}
不要忘记在您的范围内导入转换:
import FuncConversions._
您也可以实现相反的转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)