Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中泛型的问题_Java_Generics_Rest Assured Jsonpath - Fatal编程技术网

Java中泛型的问题

Java中泛型的问题,java,generics,rest-assured-jsonpath,Java,Generics,Rest Assured Jsonpath,我正在为api调用使用RestAssured framework,我想创建一个方法,该方法将从特定变量类型的JSON响应返回give me value。 我想使用泛型返回类型,但我不喜欢我的实现。 RestAssured getList()根据JSON路径返回值列表,并转换为值类型。 当我实现getList()方法时,我必须将结果强制转换为T,以符合返回值类型: public <T> T getValuesFromResponse(Response response, ValueTy

我正在为api调用使用RestAssured framework,我想创建一个方法,该方法将从特定变量类型的JSON响应返回give me value。
我想使用泛型返回类型,但我不喜欢我的实现。
RestAssured getList()根据JSON路径返回值列表,并转换为值类型。 当我实现getList()方法时,我必须将结果强制转换为T,以符合返回值类型:

public <T> T getValuesFromResponse(Response response, ValueTypeEnum value) {
    T t = null;
    switch (value) {
        case ID:
            //Will return List<Integer>
            t = (T) response.thenReturn().jsonPath().getList("data.id", Integer.class);
            break;
        case NAME:
            //Will return List<String>
            t = (T) response.thenReturn().jsonPath().getList("data.name", String.class);
            break;
    }
    return t;
}
公共T getValuesFromResponse(响应响应,ValueTypeEnum值){ T=零; 开关(值){ 案件编号: //将返回列表 t=(t)response.thenReturn().jsonPath().getList(“data.id”,Integer.class); 打破 案例名称: //将返回列表 t=(t)response.thenReturn().jsonPath().getList(“data.name”,String.class); 打破 } 返回t; } 当我想调用此方法时,我必须将值再次转换为我需要的类型,即:

((List<Integer>) getValuesFromResponse(response, ValueTypeEnum.ID)).get(0)
((列表)getValuesFromResponse(响应,ValueTypeEnum.ID)).get(0)
如何避免双重施法?

使用generic
List
返回类型时,我的实现是否正确?

您对使用这样的方法有何看法:

 public <T> List<T> getValuesFromResponse(Response response, String key, Class <T> clazz) {
    return response.thenReturn().jsonPath().getList(key, clazz);
}
public List getValuesFromResponse(响应、字符串键、类clazz){
返回response.thenReturn().jsonPath().getList(key,clazz);
}
。。。然后称之为:

List<Integer> listOfIds = getValuesFromResponse (response, "data.id", Integer.class);
List<String> listOfNames = getValuesFromResponse (response, "data.name", String.class);
List listOfIds=getValuesFromResponse(响应,“data.id”,Integer.class);
List listOfNames=getValuesFromResponse(响应,“data.name”,String.class);

我还没有尝试过用真正的“Response”类编译它,但我认为这应该是可行的。请让我知道

您觉得使用这样的方法怎么样:

 public <T> List<T> getValuesFromResponse(Response response, String key, Class <T> clazz) {
    return response.thenReturn().jsonPath().getList(key, clazz);
}
public List getValuesFromResponse(响应、字符串键、类clazz){
返回response.thenReturn().jsonPath().getList(key,clazz);
}
。。。然后称之为:

List<Integer> listOfIds = getValuesFromResponse (response, "data.id", Integer.class);
List<String> listOfNames = getValuesFromResponse (response, "data.name", String.class);
List listOfIds=getValuesFromResponse(响应,“data.id”,Integer.class);
List listOfNames=getValuesFromResponse(响应,“data.name”,String.class);

我还没有尝试过用真正的“Response”类编译它,但我认为这应该是可行的。请让我知道

我试过了,但是没有编译<代码>公共列表getValuesFromResponse(Response-Response,DeviceValues-value){return-Response.thenReturn().jsonPath().getList(“data.id”,Integer.class);}错误是:不兼容的相等约束:T和IntegerI尝试了该操作,但未编译<代码>公共列表getValuesFromResponse(Response-Response,DeviceValues-value){return-Response.thenReturn().jsonPath().getList(“data.id”,Integer.class);}错误是:不兼容的等式约束:T和Integer这起作用,但它需要“用户”定义返回类类型,而我希望它更通用。奇怪的是,如果我使用它编译的Integer.class定义的“clazz”,但是如果我使用的是straight Integer.class,那么如果我理解正确的话,你会想要一个返回特定类的对象列表的方法来避免类型转换。并且只希望传递ValueTypeEnum。此枚举值表示:(1)响应中字段的名称是什么,如:'data.name',(2)列表将包含的类型(对象类),如:'String'。识别ValueTypeEnum的值意味着它是一个运行时处理,而避免类型转换意味着我们知道编译时在特定场景中返回什么类。我不确定这两者是否同时存在。祝你好运。这是可行的,但它需要“用户”定义返回类类型,而我希望它更通用。奇怪的是,如果我使用它编译的Integer.class定义的“clazz”,但是如果我使用的是straight Integer.class,那么如果我理解正确的话,你会想要一个返回特定类的对象列表的方法来避免类型转换。并且只希望传递ValueTypeEnum。此枚举值表示:(1)响应中字段的名称是什么,如:'data.name',(2)列表将包含的类型(对象类),如:'String'。识别ValueTypeEnum的值意味着它是一个运行时处理,而避免类型转换意味着我们知道编译时在特定场景中返回什么类。我不确定这两者是否同时存在。祝你好运