方法真的可以与 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 def
和 object
。
trait Foo
trait A {
def foo: Foo
}
class B extends A {
object foo extends Foo
}
所以是的,我相当确定它应该是向后二进制兼容的。
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 def
和 object
。
trait Foo
trait A {
def foo: Foo
}
class B extends A {
object foo extends Foo
}
所以是的,我相当确定它应该是向后二进制兼容的。