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);
}