scr*_*avy 5 java methods lambda scala method-reference
在这个Java类中:
import java.util.function.*;
public class T {
public String func(String a) {
System.out.println("There we go: " + a);
return a;
}
public static void main(String... args) {
final Supplier<T> c = T::new;
final BiFunction<T, String, String> f = T::func;
final T t = c.get();
final String v = f.apply(t, "something");
System.out.println(v);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以获得T
对实例方法的构造函数的方法引用func
.
有没有办法在scala中做同样的事情,即得到
val c: () => T = ??? // default constructor of T as function
val f: (T, String) => String = ??? // instance method func of T as function
Run Code Online (Sandbox Code Playgroud)
没有包装它们:
val c: () => T = () => new T
val f: (T, String) => String = (t, arg) => t.func(arg)
Run Code Online (Sandbox Code Playgroud)
即有没有像Java 8那样优雅的方式获取构造函数和实例方法引用来获取这些东西的scala函数?
就像你在 java 8 中所做的那样,你不能。对于类构造函数,我认为除了您所做的之外,没有其他方法可以做到这一点。
对于函数,您可以使用我认为“更干净”的参数占位符。
var t = new T()
var func = t.func _
func("a")
Run Code Online (Sandbox Code Playgroud)
如果您使用 acase class
那么您可以使用该apply
方法。
case class C(a: String)
var d = C.apply _
d("c")
Run Code Online (Sandbox Code Playgroud)
您也可以apply
在普通类中使用该函数,但您必须自己实现它。对于案例类,它们是自动实现的。
归档时间: |
|
查看次数: |
1971 次 |
最近记录: |