在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),并使用运行时测试来确保参数是其他实例。下行:编译时无法捕获问题。
> require multiple arguments(catchches compile-time correctness but looks dorky):
void spew(Appendable xAppend, Closeable xClose)
{
xAppend.append("Bleah!\n");
if (timeToClose())
xClose.close();
}