我想为某些导入的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导入的其他类型创建一个伴随对象?
答案 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 = ???
}