Java 创建将对象转换为特定方法的通用函数

Java 创建将对象转换为特定方法的通用函数,java,generics,Java,Generics,我目前有以下问题: 我有一个Mutation对象,它有以下字段:id和tableName。此对象表示MySQL服务器上的更改,在带有name=tableName和row\u id=id的表中。现在,我想将这个对象“转换”为对服务器的新请求。通过这个请求,我希望从服务器(具有该id并且是表中具有该tableName的行)获取更新的对象。我构建了以下方法来处理请求: public <T> List<T> doGet(Class<T[]> clazz, List&l

我目前有以下问题:

我有一个
Mutation
对象,它有以下字段:
id
tableName
。此对象表示MySQL服务器上的更改,在带有
name=tableName
row\u id=id
的表中。现在,我想将这个对象“转换”为对服务器的新请求。通过这个请求,我希望从服务器(具有该id并且是表中具有该tableName的行)获取更新的对象。我构建了以下方法来处理请求:

public <T> List<T> doGet(Class<T[]> clazz, List<Parameter> parameters) throws Exception {

    StringBuilder URL = new StringBuilder(baseURL);
    String tableName = (String) clazz.getComponentType().getDeclaredField("tableName").get(null);

    URL.append(tableName+"/get");

    ...

    T[] objectsArray = new Gson().fromJson(json, clazz);

    return Arrays.asList(objectsArray);
}
但这不起作用,(无法将类转换为类),因此我假设我不正确理解泛型的用法

另一个问题是,当
doGet()
方法工作时,我不知道如何将此方法的返回转换为
列表的正确类型

List<SomeType> updatedObjects = doGet();
List updateobjects=doGet();

但是在这里,
SomeType
是可变的,如果可能的话,我不知道如何让它正常工作。我也可以用我拥有的每个
类构建一个巨人,但我认为这可以用更少的代码来完成。

我担心,为了让它正常工作,您必须引入一个名为
表的新实体,其中
T
参数是行的类。因此,您将有一个
和一个


然后,您需要将一个
Table Table
作为第一个参数传递给
doGet()
方法,这样结果将是类型安全的。你的基于反射的方法很可爱,但它不起作用,因为它不提供编译时类型信息。

关于stackoverflow,当你说“它不起作用”时,准确描述它不起作用的方式是一个非常好的主意。感谢Mike Nakis的提示,我已经在需要的地方更新了我的问题。我们又来了,“它不工作”没有帮助。您是否尝试过
返回(类)产品[].Class;
?这里的问题是,方法的类型参数始终取决于调用它的代码。因此,假设我做了一个伪调用,如
Utils.tableNameToClass(“产品”)
,我刚刚将
转换为
。这方面没有办法。你可以像自动转换一样使用
表名转换类
,来保存字符(这是Mike的建议),但没有静态类型检查。+1是的,甚至没有那么糟糕。
类表{…public static final Table PRODUCT=new Table(“PRODUCT”,PRODUCT.class);}
List x=doGet(Table.PRODUCT,pams);
类似于
tableNameToClass
的构造不是类型安全的,它不短于定义例如泛型常量。
List<SomeType> updatedObjects = doGet();