当前位置: 首页 > 知识库问答 >
问题:

具有子类型参数的类实现接口

舒嘉德
2023-03-14

为什么我不能这样做?我得到编译错误。

public interface A {

  void update(Object a);
}

public class B implements A{
     void update(Long a) {
     }

}

那是Java8

我不认为这里违反了任何OO原则。

这真的让我很难实现通用 API......

(我试图将泛型从游戏中剔除,因为泛型API变得反直觉了)

共有2个答案

帅锦
2023-03-14

实现接口的类必须实现接口中声明的所有方法。这些方法必须具有与接口中声明的完全相同的签名(名称参数)。该类不需要实现(声明)接口的变量。只有方法。

http://tutorials.jenkov.com/java/interfaces.html#:~:text=A 实现的类,只有方法。

汝墨一
2023-03-14

您得到一个编译错误,因为void update(Long a)没有实现void upload(Object a)

您可以按如下方式实现它:

public class B implements A {
    void update(Object o) {
        if (!(o instanceof Long)) {
            // possibly throw an exception
        }
        Long a = (Long) o;
        ...
    }
}
 类似资料:
  • 我正在开发一个基于JAX-RS的Java应用程序,使用Google Guice进行依赖注入。我的代码中有以下接口: 在上面的接口中,Lock是一个定义如下的接口: 锁接口由以下类实现: LockProvider接口由以下类实现: 除了LockProvider之外,我不希望应用程序中的类知道底层锁项,这就是为什么我没有在lock接口中包含getUnderlyingLockItem。 现在,当我尝试将

  • 问题内容: 我花了一些时间想知道是否有可能编写一个guice模块,该模块本身使用类型T进行参数化,并使用其type参数指定绑定。 像在此示例(不起作用)中那样: 我尝试了不同的方法,试图将T作为类/ TypeLiteral的实例传递给MyModule,但没有一个起作用。帮助表示赞赏。 问候,zukasz Osipiuk 问题答案: 为此,您将必须使用从头开始构建每个TypeLiteral 。您可以

  • 问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类

  • 导入java.util.ArrayList;导入java.util.List; 另外,artist.java配备了空构造函数 @IgnoreExtraProperties公共类Artist{private String ArtistId;private String ArtistName;private String ArtistAmount;private String ArtistAry; 这

  • 我试图将MealsRepository接口实现到MealsRepositoryImpl中,但是我得到了以下错误: 无效的重写。'mealsrepositoryimpl.findallforcanteenbydate'('(int,DateTime)->Future Map int,dynamic')的类型不是'mealrepository.findallforcanteenbydate'('(in

  • 问题内容: 我有这个界面: 并实现该类: 在此案例中,parameter是,这是的具体实现。如何使用反射获得此效果? 问题答案: 通过通用接口解析类型。例如 PS:请记住acutalTypeArguments是type 。他们一定不是一个。在您的情况下,它是一个Class,因为您的类型定义是。