我有一个界面,我实现了以下方法:
public void shutdown()
相当多的实现此方法的类实际上不会使用它。有没有办法检查实现的主体是否实际上有一些内容?
我想我可以添加boolean
支票,但我想避免额外的开销。
答案 0 :(得分:4)
在您的子类中,如果没有实现,您可以在java.lang.UnsupportedOperationException
中抛出shutdown()
。
您的调用类只需要捕获该异常,然后您就会知道哪个类没有实现该方法。
答案 1 :(得分:1)
你有没有考虑过根本没有实施任何东西?猜猜你的api,看看ExecutorService
:
// run the service
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
如果上面代码中的shutdown()
什么也没做,那真的很重要吗?假设当所有线程都完成时,池最终会关闭。
在调用方法之前尝试检查似乎是另一种类型Conditional Test Antipattern.多态性的一点是你不应该检查,该方法应该处理所有情况。它是封装的。方法中的空体仅仅意味着对象不需要处理该情况。
我只是想确保你一直想到这一点。有时候一个空的方法体会起作用,有时它不会。试着考虑一下如果你什么都不实施会发生什么。它会正常运行,并使您的代码更简单吗?如果是,请使用它。
如果没有,那么我认为应该在你的界面添加一个布尔测试,对于那些实际上能够实现正确关闭方法的对象,就像canShutdown()
一样。
public interface MyShutdown {
boolean canShutdown();
void shutdown();
}
这对我来说至少是半干净的。