为什么我不能从Scala访问实现Java接口的类中声明的变量?

Geo*_*los 7 java scope scala interface

在Java中,我有一个实现接口的类:

AlertDialog implements DialogInterface
Run Code Online (Sandbox Code Playgroud)

如果在接口内部声明了一些变量,我可以访问它们:

AlertDialog.BUTTON_POSITIVE
Run Code Online (Sandbox Code Playgroud)

但是在Scala中,上面的行没有编译.好像它是隐藏的.有没有办法在Scala中访问这些变量而不创建新对象或做任何其他hacky?

Sub*_*oid 14

稍微详细一点:无法接受的原因是George正在讨论界面上定义的静态成员.Scala没有静态成员 - 而是创建一个object,这是一个具有单个实现的常规类.当您从Java接口扩展时,Scala将仅扩展非静态成员,因为静态成员被视为在同伴中object.伴随对象的名称与接口相同,因此您可以将其作为DialogInterface.BUTTON_POSITIVE.


Geo*_*los 2

Scala 中无法从AlertDialog类中访问这些变量,但您可以使用接口本身作为对象来访问它们。

所以你可以直接从接口访问变量:

DialogInterface.BUTTON_POSITIVE
Run Code Online (Sandbox Code Playgroud)

  • @UmNyobe 这是一件非常好的事情。请参阅http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions (4认同)