有一个包含类的Java库:
class DefaultFieldFactory {
...
public static String createCaptionByPropertyId(Object propertyId) { ... }
...
}
class FieldFactory extends DefaultFieldFactory {
...
// Lot of methods that use DefaultFieldFactory.createCaptionByPropertyId
...
}
我在Scala项目中使用FieldFactory类,我需要更改createCaptionByPropertyId方法。
如果没有AOP并重写FieldFactory类,我怎么能这样做?
是否可以在包中替换DefaultFieldFactory类实现?它相对简单而且简短。
提前致谢, 艾格。
答案 0 :(得分:2)
静态类将进入Scala中的object
,它不会继承DefaultFieldFactory
的静态方法 - 事实上,它很好地反映了您无法覆盖静态的事实。
这就是静电不受欢迎的一个原因。
答案 1 :(得分:1)
我认为有一种hacky方式可以做到这一点......但是如果你有原始java类的源代码,我强烈建议你改一下。
如果没有,您可以创建DefaultFieldFactory
的新实现作为类中的对象,隐藏您班级中的原始实现。然后DefaultFieldFactory
对象的实现可以调用原始的java implimentations。
// in package x.y.a
class DefaultFieldFactory {
...
public static String createCaptionByPropertyId(Object propertyId) { ... }
...
}
// in package x.y.b
class FieldFactory extends DefaultFieldFactory {
object DefaultFieldFactory{
def createCaptionByPropertyId(propertyId: AnyRef): String {
//import the original implimentation
import x.y.b.DefaultFieldFactory._
...
}
}
// Lot of methods that use DefaultFieldFactory.createCaptionByPropertyId
...
}
就像我说的......不太好!