Java调用Scala案例类w /隐式参数?

nem*_*ron 9 java scala

他,

如何从Java调用一个具有隐式参数的Scala案例类?

斯卡拉:

object Loggable {
 case class RunUnit(val id : Integer) {
  override def toString() = id.toString()
 }
 case class Run(
  val id : Integer, val unit : RunUnit, val start : Long
 )(implicit db : DB) { ... }
}
Run Code Online (Sandbox Code Playgroud)

Java的:

public class JTest {
  public static void main(String[] args) {
    // works fine
    Loggable.RunUnit ru = new Loggable.RunUnit(4711);
    // how to add the implicit parameter???
    new Loggable.Run(new Integer(4711), ru, 0L);
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

/纳米

huy*_*hjl 9

您必须明确提供隐式.试试这个:

new Loggable.Run(new Integer(4711), ru, 0L, db);
Run Code Online (Sandbox Code Playgroud)

我尝试使用javap来查看签名是什么,并且在顶级案例类中,构造函数只有一个额外的参数.

编辑:使用您的代码(使用虚拟DB类):

scala> :javap Loggable$Run
[snip]
    public Loggable$Run(java.lang.Integer, Loggable$RunUnit, long, DB);
}
Run Code Online (Sandbox Code Playgroud)