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#中我也尽量不这样做……

您是否考虑过将initFooinitBar分别用于FooBar类(等)? 这是一个足够简单的模式,可以避免名称冲突。 不可否认,有点难看。

Java没有等效的C# new运算符

用于从基类成员隐藏inheritance的成员。

对于您想要做的事情,为什么不创建其他测试可以扩展的基类,并在基类中创建一个名为init() (用@Before标记init()abstract方法? 这会强制所有子类提供init()方法。