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

检查是否填充了Java接口方法,java,Java,我有一个接口,在其中我实现了以下方法: public void shutdown() 很多实现这个方法的类实际上不会使用它。有没有办法检查实现主体中是否确实包含一些内容 我想我可以添加一个boolean检查,但我希望避免额外的开销。在子类中,如果没有实现,可以在shutdown()中抛出java.lang.UnsupportedOperationException 您的调用类只需要捕获该异常,然后您就可以确切地知道哪个类没有实现该方法。在您的子类中,如果没有实现,您可以在shutdown()中抛

我有一个接口,在其中我实现了以下方法:
public void shutdown()

很多实现这个方法的类实际上不会使用它。有没有办法检查实现主体中是否确实包含一些内容


我想我可以添加一个
boolean
检查,但我希望避免额外的开销。

在子类中,如果没有实现,可以在
shutdown()
中抛出
java.lang.UnsupportedOperationException


您的调用类只需要捕获该异常,然后您就可以确切地知道哪个类没有实现该方法。

在您的子类中,如果没有实现,您可以在
shutdown()
中抛出
java.lang.UnsupportedOperationException


您的调用类只需要捕获该异常,然后您就可以确切地知道哪个类没有实现该方法。

您是否考虑过根本不实现任何东西?猜猜你的api,看看类似于执行器服务的东西:

// run the service
     try {
       for (;;) {
         pool.execute(new Handler(serverSocket.accept()));
       }
     } catch (IOException ex) {
       pool.shutdown();
     }
如果上述代码中的
shutdown()
什么都没做,这真的很重要吗?假设池最终会在所有线程完成时关闭

在调用方法之前尝试检查似乎是多态性的另一种类型,即您不需要检查,该方法应该处理所有情况。它是封装的。方法中的空主体只是意味着对象不需要处理这种情况

我只是想确定你一直都在想这个。有时空的方法体有效,有时则无效。试着想想如果你根本没有实现任何事情会发生什么。它是否能正常工作,并使代码更简单?如果有,就用它

如果没有,那么我认为应该向您的接口添加一个布尔测试,类似于
canShutdown()

public interface MyShutdown {
   boolean canShutdown();
   void shutdown();
}

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

您是否考虑过不实施任何措施?猜猜你的api,看看类似于执行器服务的东西:

// run the service
     try {
       for (;;) {
         pool.execute(new Handler(serverSocket.accept()));
       }
     } catch (IOException ex) {
       pool.shutdown();
     }
如果上述代码中的
shutdown()
什么都没做,这真的很重要吗?假设池最终会在所有线程完成时关闭

在调用方法之前尝试检查似乎是多态性的另一种类型,即您不需要检查,该方法应该处理所有情况。它是封装的。方法中的空主体只是意味着对象不需要处理这种情况

我只是想确定你一直都在想这个。有时空的方法体有效,有时则无效。试着想想如果你根本没有实现任何事情会发生什么。它是否能正常工作,并使代码更简单?如果有,就用它

如果没有,那么我认为应该向您的接口添加一个布尔测试,类似于
canShutdown()

public interface MyShutdown {
   boolean canShutdown();
   void shutdown();
}

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

还有一个想法:为什么不需要实现此方法的类被强制实现此方法?您为什么关心?如果该方法不执行任何操作,那么调用它将不会执行任何操作。此外,正如@Makoto所指出的;如果一个类实际上不实现接口,那么为什么要实现?因为实现接口的每个类都需要实现每个方法。如果实现接口的许多类不需要该方法,那么该方法很可能不属于该接口。重新思考设计;您最好在需要附加函数的地方创建子类。实现一个实现该接口的抽象类。您的抽象类可以有一个默认实现。然后,从该抽象类扩展的所有其他类都可以选择不实现shutdown()方法。下面是另一个想法:为什么不需要实现此方法的类被强制实现此方法?为什么您关心?如果该方法不执行任何操作,那么调用它将不会执行任何操作。此外,正如@Makoto所指出的;如果一个类实际上不实现接口,那么为什么要实现?因为实现接口的每个类都需要实现每个方法。如果实现接口的许多类不需要该方法,那么该方法很可能不属于该接口。重新思考设计;您最好在需要附加函数的地方创建子类。实现一个实现该接口的抽象类。您的抽象类可以有一个默认实现。从该抽象类扩展的所有其他类都可以选择不实现shutdown()方法。我认为,如果不需要类的方法,最好不要在类上实现接口。@markspace:当然,这取决于使用该方法的上下文?当然,大多数标准库类都是这样做的,比如只读
Iterator
s。这是一个有趣的想法。谢谢这是丑陋的,但它会工作。我认为,如果不需要类的方法,最好不要在类上实现接口。@markspace:当然,这取决于使用该方法的上下文?当然,大多数标准库类都是这样做的,比如只读
Iterator
s。这是一个有趣的想法。谢谢