有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java如何用泛型定义接口方法

我创建了一个界面:

public interface SubApp {
           public String talk(Result<? extends Object> result);
}

这一实施:

class A implements SubApp{
   @Override
   public String talk(Result<String> result) {...}
}

我的IDE出现以下错误:方法未从其超类重写方法

如何在接口中定义方法以使方法public String talk(Result<String> result)覆盖接口的方法


共 (4) 个答案

  1. # 1 楼答案

    您的方法的问题是,您的实现比接口定义更具体,因此您的方法不会接受接口将接受的输入范围,这是不允许的。(您可以将输出类型细化为更具体的类型,因为输出类型可以向下转换为不太具体的类型,但输入的情况正好相反)

    像这样的方法应该会奏效:

    public interface SubApp<T extends Object> {
        public String talk(Result<T> result);
    }
    
    class A implements SubApp<String> {
        @Override
        public String talk(Result<String> result) { ... }
    }
    
  2. # 2 楼答案

    试试像这样的东西

    public interface SubApp<T> {
       public String talk(Result<T> result);
    }
    

    顺便说一句,您永远不需要? extends Object,因为所有内容都扩展了对象,所以您不会使用该表达式限制任何内容

  3. # 3 楼答案

    试试这样的东西-

    public interface SubApp<T> {
      public String talk(Result<T> result);
    }
    
    class A implements SubApp<String> {
      @Override
      public String talk(Result<String> result) {...}
    }
    
  4. # 4 楼答案

    ?表示通配符,但不是泛型。尝试以下方法

    public interface SubApp<X extends Object>
    {
         public String talk(Result<X> result);
    }