java - 从具有子类的类中删除 $init$ 方法

标签 java scala dbus

我在 Scala 中使用一个 Java 库,它从类定义生成 D-Bus 接口(interface)。它适用于一个简单的 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 接口(interface)上得到了一个扩展方法 $init$,大概是因为这是由 Scala 添加的。

是否可以在 Scala 中生成一个没有这个额外的 $init$ 方法的子类的类?

我显然可以用 Java 编写并导入它,但我宁愿坚持使用纯 Scala。

最佳答案

我找到了一个解决方案。我意识到 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 中确实有效,但我不确定这是我可以依赖的行为还是只是当前实现的一个特性。

关于java - 从具有子类的类中删除 $init$ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061278/

相关文章:

python - 如何使用 python 处理 dbus 接口(interface)的属性?

c++ - 获取GVariant的内容

java - 以这种方式覆盖 `equals()` 有什么缺点?

java - 计算一个类的 x 个对象的平均成绩

java - org.bouncycaSTLe.crypto.fips.FipsOperationError : Module checksum failed: entry

scala - 如何判断 Scala 宏的参数是否是函数?

scala - Spark 读取 Avro 文件

c - 如何编译基本的 D-Bus/glib 示例?

java - 如何对使用 JNI 的库进行单元测试?

scala - 如何找到两个 Option[Int] 的 min() 或 max()