是否有一个';新';Java中方法的修饰符?
Java中是否有一个等价于修饰符的修饰符 我想在单元测试中使用它——每个init()方法都应该标记为final,并用@Before注释。然后,jUnit执行所有这些init()方法是否有一个';新';Java中方法的修饰符?,java,inheritance,junit,Java,Inheritance,Junit,Java中是否有一个等价于修饰符的修饰符 我想在单元测试中使用它——每个init()方法都应该标记为final,并用@Before注释。然后,jUnit执行所有这些init()方法 我不想为这些init()方法中的每一个都提供新的名称,而且我肯定想将它们标记为final,以确保它们不会相互重写(另一种模式是从每个init()方法重写并调用super.init()。不幸的是,没有。见鬼,在@Override之前,在重写时甚至没有任何防止输入错误的方法 如果不重写超类方法,则无法创建与超类方法具有相
我不想为这些init()方法中的每一个都提供新的名称,而且我肯定想将它们标记为final,以确保它们不会相互重写(另一种模式是从每个init()方法重写并调用super.init()。不幸的是,没有。见鬼,在
@Override
之前,在重写时甚至没有任何防止输入错误的方法
如果不重写超类方法,则无法创建与超类方法具有相同签名的方法。诚然,即使在C#中,我也尽量不这样做
您是否考虑过将
initFoo
和initBar
分别用于类Foo
和Bar
(etc)?这是一个足够简单的模式,可以避免名称冲突。不可否认,这有点难看。Java没有与C#new
运算符等价的运算符
用于从基类成员隐藏继承的成员
对于您想要做的事情,为什么不创建一个其他测试可以扩展的基类,并在基类中创建一个名为
init()
(用@Before
标记)的抽象方法呢?这迫使所有子类提供一个init()
方法。一个常见模式是将您自己的“before”方法设置为final,并为子类创建受保护的(抽象)方法
在超类中
在子类中
这将为您提供两个世界中最好的:
- 在子类中重写的著名方法李>
- 覆盖是可选的李>
- 超类方法永远不会被重写李>
- 当超类决定时,即在超类决定之前或之后调用客户机方法
它确实有一个缺点——它将您与一个超级类联系在一起。不过,这对您的环境来说可能不是问题。问题确实与单个基类有关。如果类停止继承基类,则永远不会调用onBefore()方法。
@Before
public final void before() {
onBefore();
}
protected void onBefore() {
}
protected void onBefore() {
// prepare the test fixture
}