首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中要求方法参数来实现多个接口?

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

Stack Overflow用户
提问于 2009-09-30 21:44:52
回答 1查看 10.4K关注 0票数 53

在Java中这样做是合法的:

代码语言:javascript
复制
 void spew(Appendable x)
 {
     x.append("Bleah!\n");
 }

我如何做到这一点(语法不合法):

代码语言:javascript
复制
 void spew(Appendable & Closeable x)
 {
     x.append("Bleah!\n");
     if (timeToClose())
         x.close();
 }

I希望如果可能的话,强制调用者使用既可附加又可关闭的对象,而不需要特定的类型。有多个标准类可以这样做,例如BufferedWriter、PrintStream等。

如果我定义了我自己的界面

代码语言:javascript
复制
 interface AppendableAndCloseable extends Appendable, Closeable {}

这是行不通的,因为实现Appendable和Closeable的标准类不实现我的接口AppendableAndCloseable (除非我不像我认为的那样理解.空接口仍然在它们的超级接口之外添加唯一性)。

我能想到的最接近的方法是做以下工作之一:

  1. 选择一个接口(例如,Appendable),并使用运行时测试来确保参数是instanceof。缺点:编译时没有捕捉到问题。
  2. 需要多个参数(捕捉编译时的正确性,但看起来很愚蠢):

void (可附加xAppend,可关闭xClose) { xAppend.append("Bleah!\n");if (timeToClose()) xClose.close();}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-30 22:00:34

你可以用泛型来做:

代码语言:javascript
复制
public <T extends Appendable & Closeable> void spew(T t){
    t.append("Bleah!\n");
    if (timeToClose())
        t.close();
}

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

票数 86
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1500827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档