Java 如何重构以未知类作为参数的方法?

Java 如何重构以未知类作为参数的方法?,java,object,methods,delegates,Java,Object,Methods,Delegates,我想使此方法可重用,但我不确定如何提供在以下上下文中工作的参数: service.getPosts//调用的方法(即getPosts)应根据类参数的不同而有所不同 对于Post对象:postResponse.getResults{//,我希望Post类来自参数 List objects=postResponse.getResults;//我希望传递到此列表中的类也来自同一个参数 方法调用: 方法: Post对象: 根据Roman的建议更新: 您没有显示PostResponse代码,但我想是这样的

我想使此方法可重用,但我不确定如何提供在以下上下文中工作的参数:

service.getPosts//调用的方法(即getPosts)应根据类参数的不同而有所不同 对于Post对象:postResponse.getResults{//,我希望Post类来自参数 List objects=postResponse.getResults;//我希望传递到此列表中的类也来自同一个参数 方法调用:

方法:

Post对象:

根据Roman的建议更新:

您没有显示PostResponse代码,但我想是这样的:

public class PostResponse {
    private List<Post> results;

    public List<Post> getResults() {
        return results;
    }

    ....
}
其次,使用类型参数更改主方法签名:

private <T> void retrieveData(final CardAdapter mCardAdapter, final Class<T> classParam, DataSaver<T> saver) {
...
}
在这里,简单的类型参数化很可能不起作用。您必须使用最后一个参数保存程序将结果放入您的容器中:

saver.save(results);
在您的saver实现中,您实际上是这样做的

public void save(List<Post> posts) {
    mCardAdapter.addData(posts);
}

当我传递类classParam时,调用代码是什么?你能使用接口吗?或者你不能控制传入的类的源吗?我用POJO和Rest接口更新了我的问题,但我想我的观点是,我只想能够对不同的类重用retrieveData方法,这样我就不必重新调用它了编写代码。你是说你不想要泛型用法,因为它需要重写代码,更喜欢类型-值对和强制转换?非常简单的例子。在调用retrieveData之前…我有一个带有列表的对话框,即…测试人员有一个可以选择的类列表。在按下其中一个类时,我们称之为retrieveData…如果选择是Post,我们称之为Post对象。如果是Comment等…可以复制和粘贴retrieveData…方法10次,但其中的乐趣是什么?:PT可以绑定到所需的类型可能是传递给泛型类型参数的所有值的父级,以避免处理mCardAdapter.addDataobjects;为什么不能到处解析?我需要导入一些东西吗?顺便说一句,PostResponse类本身不接受参数化。需要重写超类。t本身不是一个类,它是一个类型参数;它在尖括号中“声明”。您不需要导入它。当您编写retrieveDatamCardAdapter时,Post.class,new PostDataSaver其中PostDataSaver实现DataSaver,在这个特定的调用中,T变成Post。当我调用retrieveDatamCardAdapter,Post.class,new PostDataSaver时,它希望我的retrieveData方法如下所示:private void retrieveDatafinal CardAdapter mCardAdapter,final class Param,PostDataSaver saver{而不是private void retrieveDatafinal CardAdapter mCardAdapter、final类classParam、DataSaver saver{…当我参数化PostResponse时,Ts是红色的,无法解析。
public class PostResponse {
    private List<Post> results;

    public List<Post> getResults() {
        return results;
    }

    ....
}
public class Response<T> {
    private List<T> results;

    public List<T> getResults() {
        return results;
    }

    ....
}
private <T> void retrieveData(final CardAdapter mCardAdapter, final Class<T> classParam, DataSaver<T> saver) {
...
}
mCardAdapter.addData(objects);
saver.save(results);
public void save(List<Post> posts) {
    mCardAdapter.addData(posts);
}
public interface DataSaver<T> {
    void save(List<T> objects);
}