使用静态键入别名Java类

Sid*_*ina 7 scala

假设MyClass是一个用Java定义的类,并且有许多静态成员和非静态成员.我试图在Scala对象中MyObject为此类(和关联的伴随对象)设置别名,如下所示:

object MyObject {
  import javastuff._
  type MyAlias = MyClass
  val MyAlias = MyClass
}
Run Code Online (Sandbox Code Playgroud)

Scalac抱怨道:

error: object MyClass is not a value
val MyAlias = MyClass
Run Code Online (Sandbox Code Playgroud)

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

Kev*_*ght 6

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

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

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

  • 好吧,这是一个角落案例,但这不是 Scala 的。我现在可以在某个酒吧看到 JVM,被指责不使用保护和从事非面向对象的活动:“但她(Scala)只是要求它!她可能拒绝了,但是我知道她的意思是肯定的。她只是在开玩笑,一开始坐在我腿上就是她的错……” (2认同)