Java вызывает класс случая Scala с неявным параметром? - PullRequest
9 голосов
/ 18 октября 2011

Он

Как вызвать из Java класс случая Scala с неявным параметром?

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) { ... }
}

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);
  }
}

Спасибо

/ нм

1 Ответ

9 голосов
/ 18 октября 2011

Вы должны предоставить явное явно.Попробуйте это:

new Loggable.Run(new Integer(4711), ru, 0L, db);

Я попытался использовать javap, чтобы увидеть, что такое подпись, и в классе case верхнего уровня просто есть дополнительный параметр конструктора.

Редактировать: используя ваш код (с фиктивным классом БД):

scala> :javap Loggable$Run
[snip]
    public Loggable$Run(java.lang.Integer, Loggable$RunUnit, long, DB);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...