2016-06-03 22 views
0

Ich habe eine scala Fall-Klasse, die wie folgt aussieht:Umwandlung von scala [Seq] zu java

case class AddressView(id: Option[Long], 
         address: Address, 
         purpose: Seq[String]) 

ich von Java diese Klasse aufrufen müssen.
Dies scheint nicht zu funktionieren:

AddressView billToAddress = new AddressView 
      (BusinessFieldValue.ShipToAddressId, 
       shipAddress, 
       (Seq<String>)Arrays.asList("BILLING")); 

Kann mir jemand sagen, den richtigen Weg, dies zu tun?

+0

Sind Sie lange in einer scala.Option Verpackung? –

Antwort

0

So gibt es 2 Dinge, die Sie beheben müssen; Sie müssen Ihre Long in eine Option einfügen, und Sie müssen Ihre Liste ordnungsgemäß in eine Scala Seq konvertieren.

Die Klasse addressview verwendet eine Option [Long] als Parameter. Es wäre schön, wenn Sie Ihrem Konstruktor nur einen Long übergeben würden, aber Sie müssen Ihren Long in eine Option einfügen.

Option hat 2 Unterklassen, einige und keine. Sie müssen also einige in Ihr Java-Programm importieren. Sie müssen außerdem die Klassenbibliothek zu Ihrem Klassenpfad hinzufügen.

Für die Konvertierung bietet scala eine eingebaute Funktionalität in scala.collection.JavaConversions.

So ist das Endergebnis ..

import scala.Some; 
import scala.collection.JavaConversions; 
import java.util.Arrays; 

public class Test { 

    public static void main(String[] args){ 
    AddressView billToAddress = new AddressView 
     (new Some<>(BusinessFieldValue.ShipToAddressId), 
      shipAddress, 
      JavaConversions.asScalaBuffer(Arrays.asList("BILLING"))); 

    } 

} 
Verwandte Themen