使用静态键入别名Java类

时间:2011-02-09 09:55:05

标签: scala

假设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

我该如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:6)

虽然这在纯Scala中适用于类+伴随对象,但使用Java的静态方法是不可能的,因为它们不属于任何接口。

理论上,Scala 可以创建一个包含某些类的所有静态方法的委托的对象,但它目前不会这样做。如果你觉得编写插件感觉很舒服,也可以为此编写一个编译器插件。

如果做不到这一点,你要么必须自己创建一个充满代表的对象,要么只是挑选一些方法并将它们作为函数传递。

答案 1 :(得分:0)

  使用Java的静态方法是不可能的,因为它们不属于任何界面。

5年后更新:PR 5131提及:

  

我们曾经在一个对象拥有时禁用静态转发器的生成   trait作为伴侣,因为无法将方法与body添加到   JVM 6中的接口。

     

JVM解除了这个限制,以支持接口中的默认方法,   所以我们也可以解除对静态转发器的限制。

     

修正scala-dev issue 59

commit 41c9a17Jason Zaugg (retronym)