开发者

Type aliasing Java classes with statics

Suppose MyClass is a class defined in Java, and has many static as well as non-static members. I tried to alias this class (and associated companion object) in a Scala开发者_开发问答 object MyObject as shown below:

object MyObject {
  import javastuff._
  type MyAlias = MyClass
  val MyAlias = MyClass
}

Scalac complains:

error: object MyClass is not a value
val MyAlias = MyClass

How do I work around this? Thanks.


Although this works in pure Scala for a class + companion object, it's not possible with Java's static methods, as these don't belong to any interface.

Scala could, in theory, create an object containing delegates to all the static methods of some class, but it doesn't do this currently. It's also possible to write a compiler plugin for this if you feel comfortable writing plugins.

Failing that, you'll either have to create an object full of delegates yourself, or just cherry-pick a few methods and pass them around as functions.


it's not possible with Java's static methods, as these don't belong to any interface.

Update 5 years later: PR 5131 mentions:

We used to disable generation of static forwarders when a object had a trait as a companion, as one could not add methods with bodies to an interface in JVM 6.

The JVM lifted this restriction to support default methods in interfaces, so we can lift the restriction on static forwarders, too.

Fixes scala-dev issue 59

See commit 41c9a17 by Jason Zaugg (retronym).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜