使用scala写出java的BiConsumer
最近做一个项目需要使用scala调用java的API,但是java的api上面的输入参数为BiComsumer接口,这种接口在java中写很简单,比如这样
(m,n)-> System.out.println(m+n)
但是在Scala中调用就没有那么简单了
于是我就查看了Biconsumer的源码,发现他有着两个方法,其中一个方法已经实现,我仅需实现一个accept方法即可。
package java.util.function;
import java.util.Objects;
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
Objects.requireNonNull(after);
return (l, r) -> {
accept(l, r);
after.accept(l, r);
};
}
}
于是我猜想,在java中可以这样做
BiConsumer<Integer, Integer> a = new BiConsumer<Integer, Integer>() {
@Override
public void accept(Integer m, Integer n) {
System.out.println(m+n);
}
};
a.accept(3,8);
那么在scala中实现方式也就变得很清晰了
val consumer = new BiConsumer[Integer, Integer](){
override def accept(m:Integer, n:Integer]):Unit = {
System.out.println(m + n);
}
}
于是这时候我就得到了consumer这个参数。问题得以解决