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