如何要求Java中的方法参数来实现多个接口?
2022-08-31 19:54:03
在Java中这样做是合法的:
void spew(Appendable x)
{
x.append("Bleah!\n");
}
我该怎么做(语法不合法):
void spew(Appendable & Closeable x)
{
x.append("Bleah!\n");
if (timeToClose())
x.close();
}
如果可能的话,我希望强制调用方使用可追加和可关闭的对象,而不需要特定的类型。有多个标准类可以做到这一点,例如BufferedWriter,PrintStream等。
如果我定义自己的接口
interface AppendableAndCloseable extends Appendable, Closeable {}
这不起作用,因为实现Appendable和Closeable的标准类没有实现我的接口AppendableAndCloseable(除非我不理解Java,因为我认为我确实如此......空接口仍然在其超接口之外增加了唯一性)。
我能想到的最接近的是执行以下操作之一:
选择一个接口(例如 Appendable),并使用运行时测试来确保参数是其他接口。缺点:编译时未捕获问题。
instanceof
-
需要多个参数(捕获编译时的正确性,但看起来很笨拙):
void spew(Appendable xAppend, Closeable xClose) { xAppend.append("Bleah!\n"); if (timeToClose()) xClose.close(); }