我正在Scala中使用Java库,该库根据类定义生成D-Bus接口。使用简单的Scala类可以很好地工作:
@DBusInterfaceName("me.TestInterface")
trait TestInterface extends DBusInterface {
def changeSomething(thing: String): Unit
}
我需要添加一个子类以实现D-Bus信号:
@DBusInterfaceName("me.TestInterface")
trait TestInterface extends DBusInterface {
def changeSomething(thing: String): Unit
final class SomethingChanged(thing: String) extends DBusSignal("SomethingChanged")
}
当我这样做时,我在D-Bus接口上得到了一个Extrat方法$init$
,大概是因为这是Scala添加的。
是否可以在Scala中生成一个带有子类的类,而该子类没有这种额外的$init$
方法?
我可以清楚地用Java编写并导入它,但是我宁愿坚持使用纯Scala。
答案 0 :(得分:0)
我找到了解决方案。我意识到Java使用static class
作为内部类。 Scala中的等效项是将类放在伴随对象中:
@DBusInterfaceName("me.TestInterface")
trait TestInterface extends DBusInterface {
def changeSomething(thing: String): Unit
}
object TestInterface {
case class SomethingChanged(thing: String) extends DBusSignal("/me/Test")
}
这在Scala 2.13中确实有效,但是我不确定这是我可以依靠的行为还是当前实现的功能。