检查是否填充了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。这是一个有趣的想法。谢谢