如何在Java中要求方法参数来实现多个接口?

在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,空接口仍然在其超接口之上和之外增加了唯一性)。

我能想到的最接近的方法是执行以下操作之一:

  1. 选择一个接口(例如,Appendable),并使用运行时测试以确保该参数为另一个instanceof。缺点:在编译时未发现问题。

  2. 需要多个参数(捕获编译时正确性,但看起来很笨拙):

    void spew(Appendable xAppend, Closeable xClose)

    {

    xAppend.append(“Bleah!\n”);

    if (timeToClose())

    xClose.close();

    }

回答:

您可以使用泛型:

public <T extends Appendable & Closeable> void spew(T t){

t.append("Bleah!\n");

if (timeToClose())

t.close();

}

实际上,您的语法 几乎是 正确的。

以上是 如何在Java中要求方法参数来实现多个接口? 的全部内容, 来源链接: utcz.com/qa/411916.html

回到顶部