在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

我试图用泛型类型在Java中实现一个泛型接口,但却遇到了编译错误。我想知道是否可能做到以下几点:

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响应)
(第一个
删除)