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

如何多次实现相同的接口,但使用不同的泛型?

商璞
2023-03-14
问题内容

我有以下接口,我想在类中多次实现:

public interface EventListener<T extends Event>
{
    public void onEvent(T event);
}

现在,我希望能够通过以下方式实现此接口:

class Foo implements EventListener<LoginEvent>, EventListener<LogoutEvent>
{

    @Override
    public void onEvent(LoginEvent event)
    {

    }

    @Override
    public void onEvent(LogoutEvent event)
    {

    }
}

但是,这给了我错误:Duplicate class com.foo.EventListener在行上:

class Foo implements EventListener<LoginEvent>, EventListener<LogoutEvent>

是否可以使用不同的泛型两次实现接口?如果不是,那么我在这里可以做的下一步工作是什么?


问题答案:

您需要使用内部或匿名类。例如:

class Foo {
   public EventListener<X> asXListener() {
      return new EventListener<X>() {
          // code here can refer to Foo
      };
   }


  public EventListener<Y> asYListener() {
      return new EventListener<Y>() {
          // code here can refer to Foo
      };
   }
}


 类似资料:
  • 问题内容: 假设我必须实现在两个不同的包中声明的两个不同的接口(在两个不同的独立项目中)。 我有包装 并包装 在我的包里 如何处理这种情况? 问题答案: 正如常见问题解答所提到的 其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。 在Go的类型系统中,仅按名称进行匹配并要求类型一致是简化的主要决定 。 在您的情况下,您将满足两个接口。 您可

  • 问题内容: 此代码完美地工作。方法test()适用于两个接口。幕后到底发生了什么?在实际情况下,此功能有何用处? 问题答案: 因为它是一个接口,所以不会造成任何危害。通过实现和,您基本上是在为您的课程使用蓝图。双方并说,应实施一个名为方法 您的类实现了该方法,因此接口已完成其工作。 基本上,您的班级在说:“哦,我需要因为接口而实现”,然后您就实现了。然后您的班级说:“哦,嘿,由于接口我需要再次实现

  • 问题内容: 考虑以下代码: 这会导致以下错误: 类型B和A不兼容;都定义了another(),但是返回类型不相关 我已经看到了这样的问题,并按照公认的答案中的不兼容示例进行操作-即 但是,在那种情况下,返回类型确实是不兼容的-返回类型不能同时为void和布尔值。而在上面的示例中,返回类型是an 和a ,因此可以实现两个扩展接口。 此外,在查看了JLS(8.4.8、8.4.8.3、8.4.8.4)之

  • 问题内容: 说我有两个结构: 我希望他们都实现接口A: 像这样对First和Second结构都实现似乎是多余的: 有没有一种方法可以为实现接口A的所有结构提供一个实现?像这样的东西,但似乎不起作用: 谢谢! 问题答案: 不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的2结构中,因此只需要一个基本类型的实现即可: 用法: 操场上的完整例子 嵌入文件

  • 这个问题是关于接口与实现该接口的类之间的关系。我看不出这个或这个如何回答这个问题。 我创建了一个接口和一个抽象泛型类,它实现了该接口。然后创建两个具体的类和。然后创建了一个元素列表,这些元素使用一个值和一个值扩展了。到目前为止还不错。 现在我要分配扩展为。我的期望是,这应该是有效的,因为无论什么扩展也实现。但编译器不允许我。这是一个错误: 我可以复印一下名单: 用于创建一个值,如果类型为。但赋值报

  • 让我们假设一个后端应用程序,它公开了一些Rest API,运行在地址192.168.1.10:8889的Jetty网络服务器上。 我希望有一个前端应用程序(仅限于html/javascript,在apache2 Web服务器上)在相同的IP上运行,但在不同的端口(例如8000)上运行,它应该使用后端应用程序公开的API。 我怎样才能让这个架构工作而不进入“No'Access-Control-All