当前位置: 首页 > 面试题库 >

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

符学
2023-03-14
问题内容

在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具有: 如何在Scala中实现相同的功能?也就是说,将不确定数量的参数传递给方法? 问题答案: 给出一个数组。将变量参数参数作为最后一个形式参数。

  • 问题内容: 我想在Java中实现方法链接。 我该如何实现? 还请告诉我何时使用它。 我想创建可以按如下方式使用的方法链接: 或喜欢 或喜欢 问题答案: 让你的方法返回如下: 这样,每次调用其中一个方法后,你将获得返回的同一对象,以便可以调用另一个方法。 当你要在对象上调用一系列方法时,此技术很有用:它减少了实现该方法所需的代码量,并允许你在方法链之后使用单个返回值。 减少显示对话框所需的代码量的一

  • 问题内容: 我不是100%相信这是个好主意,但是今天我碰到了一些目前实现为的代码: 这里再提供方法,其使用转换传入的向/从。 我正在考虑做的是试图重构它,以便声明自己的枚举: 然后,我便可以将其重写为如下所示的模糊内容: 然后可以从中的on- type对象调用该方法。当然,问题在于“ ”不是有效的语法。有什么办法可以做到这一点? 我不想只拥有,因为T成为枚举也很重要。 提前致谢! 问题答案: 改用

  • 问题内容: 如何实现具有多个/相同连接的多个线程,以便可以快速下载单个大表数据。 实际上,在我的应用程序中,我正在下载包含12个lacs(1 lac = 100,000)记录的表,以正常的连接速度至少要花4个小时来下载,而在连接缓慢的情况下要花更多的时间。 因此,需要在Java中实现多个线程,以下载具有多个/相同连接对象的单个表数据。但是不知道该怎么做。 如何在多个线程中放置记录指针,然后如何将所

  • 本文向大家介绍如何在Java中使用一个或多个参数实现构造函数引用,包括了如何在Java中使用一个或多个参数实现构造函数引用的使用技巧和注意事项,需要的朋友参考一下 方法引用也可以适用于Java 8中的构造函数。可以使用类名和new关键字创建构造函数引用。 可以将构造函数引用分配给任何定义与该构造函数兼容的方法的功能接口引用。 语法 具有一个参数的构造函数引用示例 输出结果 具有两个参数的构造函数引

  • 我使用的是OpenAPI3,有两个查询参数,其中至少有一个是必需的,但哪个并不重要。 这在OpenAPI3中可能吗?就我所见,规范和JSON模式规范中都没有提到它。