在Java中用泛型类型实现泛型接口
我试图用泛型类型在Java中实现一个泛型接口,但却遇到了编译错误。我想知道是否可能做到以下几点:在Java中用泛型类型实现泛型接口,java,generics,Java,Generics,我试图用泛型类型在Java中实现一个泛型接口,但却遇到了编译错误。我想知道是否可能做到以下几点: public class ListResponse<T> { private List<T> response; public ListResponse(List<T> response) { this.response = response; } public List<T> getResponse
public class ListResponse<T> {
private List<T> response;
public ListResponse(List<T> response) {
this.response = response;
}
public List<T> getResponse() {
return response;
}
}
公共类ListResponse{
私有列表响应;
公共列表响应(列表响应){
这个。反应=反应;
}
公共列表getResponse(){
返回响应;
}
}
而麻烦类:
import java.util.function.Consumer;
import java.util.List;
import com.myorg.response.ListResponse;
public class ListPresenter<T> implements Consumer<ListResponse<T>> {
private ListResponse<T> response;
public <T> void accept(ListResponse<T> response) {
this.response = response;
}
// Rest of class
}
import java.util.function.Consumer;
导入java.util.List;
导入com.myorg.response.ListResponse;
公共类ListPresenter实现使用者{
私有列表响应;
公共无效接受(列表响应){
这个。反应=反应;
}
//其他同学
}
我希望有这样的调用代码:
ListPresenter<Integer> presenter = new ListPresenter<>();
ListPresenter-presenter=新建ListPresenter();
但是,我得到一个编译错误,消息如下:
error: ListPresenter is not abstract and does not override abstract
method accept(ListResponse<T>) in Consumer [ERROR] where T is a
type-variable: [ERROR] T extends Object declared in class
ListPresenter
错误:ListPresenter不是抽象的,并且不重写抽象
消费者[ERROR]中的方法accept(ListResponse),其中T是
类型变量:[错误]T扩展类中声明的对象
列表演示者
您正在方法接受(…)
上重新定义泛型参数
。该机制类似于通过同名的局部变量隐藏属性
public void accept(ListResponse响应)
上的T
与public class ListPresenter上的T
未“耦合”到消费者
可以通过删除方法接受(…)
声明中的第一个
来解决此问题:
公共类ListPresenter实现消费者{
...
公共无效接受(列表响应){
...
}
...
}
您正在方法接受(…)
上重新定义泛型参数
。该机制类似于通过同名的局部变量隐藏属性
public void accept(ListResponse响应)
上的T
与public class ListPresenter上的T
未“耦合”到消费者
可以通过删除方法接受(…)
声明中的第一个
来解决此问题:
公共类ListPresenter实现消费者{
...
公共无效接受(列表响应){
...
}
...
}
在ListPresenter类中,您没有正确实现使用者的accept方法
我们使用泛型来允许类型(整数、浮点等)作为参数。
当我们定义一个类或某些东西来使用泛型时,我们使用这些角括号
但当我们必须使用这种类型时,我们不必使用角括号
例如:-
interface Consumer<T> { //Defining Interface that's why using <>
void accept(T t); //here this method can accept a parameter of T type
T returnSomething(int n) //here this method is having return type of T
}
interface Consumer{//定义接口这就是为什么使用
void accept(T);//这里这个方法可以接受T类型的参数
T returnSomething(int n)//这里这个方法的返回类型是T
}
因此,在ListPresenter类中,您为使用者接口的accept方法提供了两种类型的返回类型
public <T> void accept(ListResponse<T> response)
public void接受(ListResponse响应)
应该是这个吗
public void accept(ListResponse<T> response)
public void接受(ListResponse响应)
或者,如果它具有泛型返回类型,则为
public T accept(ListResponse<T> response)
public不接受(ListResponse)
在ListPresenter类中,您没有正确实现使用者的accept方法
我们使用泛型来允许类型(整数、浮点等)作为参数。
当我们定义一个类或某些东西来使用泛型时,我们使用这些角括号
但当我们必须使用这种类型时,我们不必使用角括号
例如:-
interface Consumer<T> { //Defining Interface that's why using <>
void accept(T t); //here this method can accept a parameter of T type
T returnSomething(int n) //here this method is having return type of T
}
interface Consumer{//定义接口这就是为什么使用
void accept(T);//这里这个方法可以接受T类型的参数
T returnSomething(int n)//这里这个方法的返回类型是T
}
因此,在ListPresenter类中,您为Consumer接口的accept方法提供了两种类型的返回类型
public <T> void accept(ListResponse<T> response)
public void接受(ListResponse响应)
应该是这个吗
public void accept(ListResponse<T> response)
public void接受(ListResponse响应)
或者,如果它具有泛型返回类型,则为
public T accept(ListResponse<T> response)
public不接受(ListResponse)
公共作废接受(ListResponse响应)
应该是公共作废接受(ListResponse响应)
(第一个
删除)公共作废接受(ListResponse响应)
应该是公共作废接受(ListResponse响应)
(第一个
删除)