我正在尝试实现一个scala函数对象(特别是 - 与apache spark一起使用)
等效的java类型是scala.Function0
(对于参数少的函数)
除了实现业务逻辑apply()
的方法之外,我发现我必须实现其他几种方法。
简单的谷歌搜索方法名称没有帮助(我看到有关应该实现的tag
方法的参考 - 但这里的方法名称是不同的。
以下是使用这些方法的代码(使用空实现)。
private static class functionObject implements Function0<Integer>{
@Override
public Integer apply() {
// TODO Auto-generated method stub
return null;
}
@Override
public byte apply$mcB$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public char apply$mcC$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double apply$mcD$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public float apply$mcF$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int apply$mcI$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public long apply$mcJ$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public short apply$mcS$sp() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void apply$mcV$sp() {
// TODO Auto-generated method stub
}
@Override
public boolean apply$mcZ$sp() {
// TODO Auto-generated method stub
return false;
}
}
这些方法是什么?它们应该如何实施?是否有一个更清洁的解决方案,将这些添加到任何类?
答案 0 :(得分:14)
Scalas FunctionX
接口是特征,其类型参数是专用的。因为专业化是由scalac完成的,因此不能由javac完成,你必须自己实现与专业化相关的所有内容。
Scala提供了抽象类AbstractFunctionX
,可以在Java端轻松实现:
// example Int => Int function
class Z extends scala.runtime.AbstractFunction1<Integer, Integer> {
public Integer apply(Integer i) {
return i;
}
}