检查是否填充了Java接口方法

时间:2014-11-11 23:18:00

标签: java

我有一个界面,我实现了以下方法:
public void shutdown()
相当多的实现此方法的类实际上不会使用它。有没有办法检查实现的主体是否实际上有一些内容?

我想我可以添加boolean支票,但我想避免额外的开销。

2 个答案:

答案 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();
}

这对我来说至少是半干净的。