Java中是否有等效的C#'s new
修饰符?
我想将它用于单元测试 - 每个init()方法都应标记为final并使用@Before进行注释。然后,jUnit执行所有这些init()方法。
我不想打扰每个init()方法的新名称,我肯定想把它们标记为final,以确保它们不会覆盖彼此(另一种模式是覆盖和从每个init()方法调用super.init()。
答案 0 :(得分:5)
一种常见的模式是使自己的'before'方法最终成为最终,并为子类创建受保护(抽象)方法。
@Before
public final void before() {
onBefore();
}
protected void onBefore() {
}
protected void onBefore() {
// prepare the test fixture
}
这为您提供了两全其美的优势:
它确实有一个缺点 - 它将你绑定到一个超级班级。不过,这对您的环境来说可能不是问题。
答案 1 :(得分:2)
不幸的是没有。哎呀,在@Override
之前,在覆盖时甚至没有任何防止错别字的方法。
如果没有覆盖该方法,则无法创建与超类方法具有相同签名的方法。诚然,即使在C#中,我也尽量不这样做......
您是否考虑过将initFoo
和initBar
分别用于Foo
和Bar
类(等)?这是一个足够简单的模式,可以避免名称冲突。不可否认,有点难看。
答案 2 :(得分:1)
Java没有等效于
的C#new
运算符
用于从基类成员隐藏继承的成员。
对于您想要做的事情,为什么不创建其他测试可以扩展的基类,并创建名为abstract
的{{1}}方法(标有init()
)in基类?这会强制所有子类提供@Before
方法。