为从Java导入的类创建伴随对象

时间:2014-09-04 09:11:02

标签: scala import companion-object

我想为某些导入的Java类型创建伴随对象,这样我就不必使用new来分配它们。我想从类型Vector3f开始,从com.jme3.math从jMonkeyEngine导入。

我尝试的是:

package com.jme3.math

object Vector3f {
  def apply() = new Vector3f()
  def apply(x:Float, y:Float, z:Float) = new Vector3f(x,y,z)
}

编译时,我收到错误:

  

错误:未找到(8,21):输入Vector3f    def apply()= new Vector3f()

当我添加import com.jme3.math.Vector3f时,我会收到警告,这可能解释了我所看到的内容:

  

警告:(3,22)导入`Vector3f'通过包数学

中的对象Vector3f的定义永久隐藏

如何为com.jme3.math.Vector3f或从Java导入的其他类型创建一个伴随对象?

1 个答案:

答案 0 :(得分:1)

这是一个命名问题,你不能同时拥有同名的Java类和Scala伴随对象。

您可以使用完全限定名称new com.jme3.math.Vector3f(...)访问协同对象内的Java类,或者在导入时指示其他本地名称。

import com.jme3.math.{ Vector3f => JV3 }

def apply(): JV3 = new JV3()

额外示例(Java类org.apache.http.HttpClient的伴随对象):

import org.apache.http.client.{ HttpClient ⇒ HC }

object HttpClient {
  def apply(): HC = ???
}

或者...

// No import
object HttpClient {
  def apply(): org.apache.http.client.HttpClient = ???
}