有没有“新的”? Java 中方法的修饰符?
是否有相当于 C# 的 new Java 中的
修饰符?
我想将它用于单元测试 - 每个 init() 方法都应该标记为 Final 并用 @Before 注释。 然后,jUnit 执行所有这些 init() 方法。
我不想为每个 init() 方法想出新名称,而且我绝对想将它们标记为 Final 以确保它们不会互相覆盖(另一种模式是覆盖并调用 super.init() 方法)。每个 init() 方法中的 init() )。
Is there an equivalent to C#'s new
modifier in Java?
I'd like to use it for unit tests - every init() method should be marked final and annotated with @Before. Then, jUnit executes all of these init() methods.
I don't want to bother coming up with new names for each of these init() methods, and I definitely wants to mark them as final to make sure they don't override eachother (an alternative pattern is to override and call super.init() from every init() method).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一种常见的模式是使您自己的“之前”方法成为最终方法,并为子类创建受保护(抽象)方法。
在超类中
在子类中
这为您提供了两全其美的方法:
它确实有一个缺点——它将你与一个超类联系在一起。 不过,这对您的环境来说可能不是问题。
A common pattern is to make your own 'before' methods final and create protected (abstract) methods for the subclasses.
In the superclass
In the subclass
This gives you the best of both worlds:
It does have a single downside - it ties you to a single super-class. Still, that may not be an issue to your environment.
不幸的是没有。 哎呀,在
@Override
之前,甚至没有任何方法可以防止覆盖时出现拼写错误。如果不重写该方法,则无法创建与超类方法具有相同签名的方法。 诚然,即使在 C# 中,我也尽量不这样做...
您是否考虑过对类
Foo
和Bar< 使用
initFoo
和initBar
/code> 分别(等等)? 这是一个足够简单的模式,可以遵循,并且可以避免名称冲突。 不可否认,有点丑。Unfortunately not. Heck, before
@Override
there wasn't even any way of protecting against typos when overriding.You can't create a method with the same signature as a superclass method without it overriding that method. Admittedly I try not to do this even in C#...
Have you considered using
initFoo
andinitBar
for classesFoo
andBar
respectively (etc)? It's a simple enough pattern to follow, and would avoid the name collisions. A bit ugly, admittedly.Java 没有相当于 C#
new
运算符,它是对于您想做的事情,为什么不创建一个其他测试可以扩展的基类,并创建一个名为
init()
的abstract
方法(用标记) >@Before
) 在基类中? 这会强制所有子类提供init()
方法。Java does not have an equivalent to the C#
new
operator which isFor what you'd like to do, why not create a base class that your other tests can extend, and create an
abstract
method namedinit()
(marked with@Before
) in the base class? This forces all subclasses to supply aninit()
method.