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

Java-如何使用泛型定义接口方法,java,generics,interface,Java,Generics,Interface,我创建了一个界面: public interface SubApp { public String talk(Result<? extends Object> result); } 公共接口子应用{ 公共字符串对话(结果尝试以下内容- public interface SubApp<T> { public String talk(Result<T> result); } class A implements SubApp<S

我创建了一个界面:

public interface SubApp {
           public String talk(Result<? extends Object> result);
}
公共接口子应用{

公共字符串对话(结果尝试以下内容-

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

class A implements SubApp<String> {
  @Override
  public String talk(Result<String> result) {...}
}
公共接口子应用{
公共字符串对话(结果);
}
类实现子应用{
@凌驾
公共字符串对话(结果){…}
}

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

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

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

class A implements SubApp<String> {
    @Override
    public String talk(Result<String> result) { ... }
}
公共接口子应用{
公共字符串对话(结果);
}
类实现子应用{
@凌驾
公共字符串对话(结果){…}
}
试试下面的方法

public interface SubApp<T> {
   public String talk(Result<T> result);
}
公共接口子应用{
公共字符串对话(结果);
}

顺便说一句,您永远不需要
?extends Object
,因为一切都在扩展Object,所以您不会使用表示通配符而非泛型的表达式限制任何内容。请尝试以下操作

public interface SubApp<X extends Object>
{
     public String talk(Result<X> result);
}
公共接口子应用
{
公共字符串对话(结果);
}

Thanx用于解释!像charm一样工作。您永远不需要
?extends Object
->不是true。可能需要它,具体取决于您是否希望相同的引用引用引用不同的参数化类型。
public interface SubApp<X extends Object>
{
     public String talk(Result<X> result);
}