2014-09-02 37 views
8

我想实现一个阶函数对象(特别是 - 与Apache火花使用)Scala的功能Java实现

相应的Java类型是scala.Function0(对于参数功能较少)

除了实现业务逻辑apply()的方法,我看到我必须实现其他几种方法。

简单的google搜索方法的名称并没有帮助(我看到关于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

也许,但为什么你想用Java编写一个函数阶愚蠢的问题?用scala编写或编写一个java构造? – nablex 2014-09-02 12:54:04

+0

我想在java项目中使用apache spark。 spark是一个scala项目,所以它期望scala对象。 我们的项目是在java中,所以我不想添加scala代码。从理论上讲,java-scala(特别是java-spark)的互操作性应该相对简单 - 但显然有一些问题不是很简单(或者至少缺少文档) – 2014-09-02 12:56:08

+0

@Ophiiryoktan Scala - > Java,简单。 Java - > Scala;变化。很容易,如果scala lib是为它设计的(!?!)否则是一个丑陋的垃圾 – 2014-09-02 13:10:27

回答

14

Scalas FunctionX接口是@ raits,其类型参数是专门的。因为专业化是由scalac完成的,因此不能由javac完成,所以你必须自己实现与专业化有关的所有事情。

斯卡拉提供了抽象类AbstractFunctionX,它可以在Java端可以轻松实现:

// example Int => Int function 
class Z extends scala.runtime.AbstractFunction1<Integer, Integer> { 
    public Integer apply(Integer i) { 
    return i; 
    } 
} 
+0

好的答案!自从scala 2.7开始,我没有实现类似的类(尽管没有专门化),但没有注意到它们存在。你知道他们何时被介绍吗? – paradigmatic 2014-09-02 16:28:33

+0

@paradigmatic自2009年12月以来:https://github.com/scala/scala/commit/f2056ddf4518285920db7554f6f93924f3cc3813 – sschaef 2014-09-02 17:51:06