аргументы по умолчанию не совместимы между Scala и Java, как упоминалось в самом последнем утверждении из http://www.scala -lang.org / node / 2075 .
, чтобы определить, как использоватьВаш приведенный выше код из Java, возможно, Javap может помочь.давайте возьмем меньший пример, чем вы опубликовали.например,
case class PersonBob(a: String = "aa", b: String = null)
, компилируя это с помощью scalac, а затем запустив javap для созданного файла класса (без расширения .class), мы получим
public class PersonBob extends java.lang.Object implements scala.ScalaObject,scala.Product,scala.Serializable {
public static final java.lang.String apply$default$2();
public static final java.lang.String apply$default$1();
public static final java.lang.String init$default$2();
public static final java.lang.String init$default$1();
public static final scala.Function1 tupled();
public static final scala.Function1 curry();
public static final scala.Function1 curried();
public scala.collection.Iterator productIterator();
public scala.collection.Iterator productElements();
public java.lang.String a();
public java.lang.String b();
public PersonBob copy(java.lang.String, java.lang.String);
public java.lang.String copy$default$2();
public java.lang.String copy$default$1();
public int hashCode();
public java.lang.String toString();
public boolean equals(java.lang.Object);
public java.lang.String productPrefix();
public int productArity();
public java.lang.Object productElement(int);
public boolean canEqual(java.lang.Object);
public PersonBob(java.lang.String, java.lang.String);
}
, мы можем видеть, чтоу нас есть конструктор
public PersonBob(java.lang.String, java.lang.String);
, поэтому в вашем случае ваш Java-код будет выглядеть примерно так:
Person p1 = new PersonBob(new GenderBob().build(), null, null)
Person p2 = new PersonBob(new GenderBob().build(), null, "Jones")
, если предположить, что класс GenderBob не принимает параметров в своем конструкторе.Что касается того, насколько свободно это объясняется в Java, я полагаю, что в конечном итоге это дело вкуса, но, по моему скромному мнению, версия Java может быть менее многословной для разработчика