方法真的可以与 class-object (scala) 二进制兼容吗?

Can a method really be binary compatible with a class-object (scala)?

metrics-scala 项目有一个 pull-request 建议更改:

class Meter {
  def exceptionMarker: new AnyRef() {
    def apply[A](f: => A): A = ???
  }
}

变得更好:

class Meter {
  object exceptionMarker {    // only this line changed
    def apply[A](f: => A): A = ???
  }
}

不过,恐怕这会导致二进制不兼容。当然,我用 Mima 检查过。美麻不怨。

所以我的问题是:Mima 是否正确,提议的更改是否真的二进制兼容?

事实上,您甚至可以在子类中 implement/override defobject

trait Foo
trait A {
  def foo: Foo
}
class B extends A {
  object foo extends Foo
}

所以是的,我相当确定它应该是向后二进制兼容的。