假设MyClass
是用Java定义的类,并且有许多静态成员和非静态成员。我试图在Scala对象MyObject
中为此类(和关联的伴随对象)设置别名,如下所示:
object MyObject {
import javastuff._
type MyAlias = MyClass
val MyAlias = MyClass
}
Scalac抱怨道:
error: object MyClass is not a value
val MyAlias = MyClass
我该如何解决这个问题?感谢。
答案 0 :(得分:6)
虽然这在纯Scala中适用于类+伴随对象,但使用Java的静态方法是不可能的,因为它们不属于任何接口。
理论上,Scala 可以创建一个包含某些类的所有静态方法的委托的对象,但它目前不会这样做。如果你觉得编写插件感觉很舒服,也可以为此编写一个编译器插件。如果做不到这一点,你要么必须自己创建一个充满代表的对象,要么只是挑选一些方法并将它们作为函数传递。
答案 1 :(得分:0)
使用Java的静态方法是不可能的,因为它们不属于任何界面。
5年后更新:PR 5131提及:
我们曾经在一个对象拥有时禁用静态转发器的生成 trait作为伴侣,因为无法将方法与body添加到 JVM 6中的接口。
JVM解除了这个限制,以支持接口中的默认方法, 所以我们也可以解除对静态转发器的限制。