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

时间:2013-11-18 05:51:53

标签: java generics interface

我创建了界面:

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 个答案:

答案 0 :(得分:3)

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

这样的事情应该有效:

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

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

答案 1 :(得分:1)

尝试这样的事情 -

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

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

答案 2 :(得分:1)

尝试类似

的内容
public interface SubApp<T> {
   public String talk(Result<T> result);
}
顺便说一句,你永远不需要? extends Object,因为一切都延伸了对象,你并没有用这个表达来限制任何东西

答案 3 :(得分:0)

?代表一张外卡而非通用卡。请尝试以下方法。

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