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