2015-10-21 89 views
2

我有java包 有主机类和客户端类,可以reveive许多主机如何斯卡拉数组转换为Java数组[]

public final class Host { 
    public final String name; 
    public final int port; 
} 

public class SomeClient{... 
    public Client(Host... hosts) throws Exception { 
    .... 
} 

我写Scala代码创建这个客户

// the hosts example is hosts1,host2,host3 
def getClient(hosts:String) :SomeClient ={ 
    val default_port:Int = 100 
    val hostsArr: Array[String] =hosts.split(",") 
    new Client (hostArr ???) 
} 

如何将scala字符串映射和转换为Host [],以便客户端能够正确创建?

回答

5
def getClient(hosts:String): SomeClient = { 

    val default_port:Int = 100 
    val hostsArr: Array[String] = hosts.split(",") 

    //Here you map over array of string and create Host object for each item 
    val hosts = hostsArr map { hostStr => 
     val host = new Host() 
     //Rest of assignment 

     host 
    } 

    new Client(hosts:_*) 
} 

您可以检查repeated parameters部分4.6.2

0

所以,实际上你的Scala数组已经是一个Java数组。你需要映射你的字符串数组,数组的主机,如:

val hosts = hostsArr.map { h => 
    val host = new Host() 
    host.name = h 
    host.port = default_port 

    host 
} 

new Client(hosts) 
+0

这是斯卡拉参考不与(主机...主机)签名编译: - (我需要以某种方式将其转换为主机[...] – Julias

+1

嗯。我想,我忘记了varargs:新客户端(主机:_ *)? – leshkin

+0

不,地图块的返回类型是错误的 –