Java 调用AWS批处理表通用API

Java 调用AWS批处理表通用API,java,amazon-web-services,generics,Java,Amazon Web Services,Generics,我必须调用AWS批处理表API,这是通用的。当我调用这个函数时,我得到了一个错误。请帮助如何调用通用API public <T> Optional<T> getValueForField(String fieldName, Class<T> clazz) { byte var4 = -1; switch(fieldName.hashCode()) { case -1532767274: i

我必须调用AWS批处理表API,这是通用的。当我调用这个函数时,我得到了一个错误。请帮助如何调用通用API

public <T> Optional<T> getValueForField(String fieldName, Class<T> clazz) {
        byte var4 = -1;
        switch(fieldName.hashCode()) {
        case -1532767274:
            if (fieldName.equals("Results")) {
                var4 = 0;
            }
            break;
        case 743387085:
            if (fieldName.equals("UnprocessedRecords")) {
                var4 = 1;
            }
        }

        switch(var4) {
        case 0:
            return Optional.ofNullable(clazz.cast(this.results()));
        case 1:
            return Optional.ofNullable(clazz.cast(this.unprocessedRecords()));
        default:
            return Optional.empty();
        }
    }

public List<UsageRecordResult> results() {
        return this.results;
    }
public可选getValueForField(字符串字段名,类clazz){
字节var4=-1;
开关(fieldName.hashCode()){
案例-1532767274:
if(fieldName.equals(“结果”)){
var4=0;
}
打破
判例743387085:
if(fieldName.equals(“未处理的记录”)){
var4=1;
}
}
开关(var4){
案例0:
返回可选的.ofNullable(clazz.cast(this.results());
案例1:
返回可选的.ofNullable(clazz.cast(this.unprocessedRecords());
违约:
返回可选的.empty();
}
}
公开名单结果(){
返回此结果;
}
调用上述API

batchMeterUsageResponse.getValueForField(RESULT, (Class<List<UsageRecordResult>>) new ArrayList<>().getClass());

batchMeterUsageResponse.getValueForField(结果,(类)new ArrayList().getClass());
我得到的错误是:

Error:(98, 175) java: incompatible types: java.lang.Class<capture#1 of ? extends java.util.ArrayList> cannot be converted to java.lang.Class<java.util.List<software.amazon.awssdk.services.marketplacemetering.model.UsageRecordResult>>
错误:(98175)java:不兼容的类型:java.lang.Class无法转换为java.lang.Class
TL;DR-如果我对代码意图的假设是正确的,那么

错误消息告诉您,尝试从一种类型的
转换为另一种类型的
,失败

编译器知道
new ArrayList().getClass()
Class
类型为
Class
。您正试图将其转换为

编译器无法进行转换,因为这两个
类型不兼容。它们不兼容的根本原因是
List
不符合以下条件:
extends java.util.ArrayList
。记住:接口
列表
数组列表
的超类。正如你所知,不可能将超类分配给子类

但这只是代码问题的第一部分。其他问题的细节可能不会像上面的解决方案那样让您的代码编译起来

如果我对代码意图的假设不正确,那么请编辑您的问题,对代码的实际意图进行更清楚的解释?TIA.

TL;DR-如果我对代码意图的假设是正确的,那么

错误消息告诉您,尝试从一种类型的
转换为另一种类型的
,失败

编译器知道
new ArrayList().getClass()
Class
类型为
Class
。您正试图将其转换为

编译器无法进行转换,因为这两个
类型不兼容。它们不兼容的根本原因是
List
不符合以下条件:
extends java.util.ArrayList
。记住:接口
列表
数组列表
的超类。正如你所知,不可能将超类分配给子类

但这只是代码问题的第一部分。其他问题的细节可能不会像上面的解决方案那样让您的代码编译起来


如果我对代码意图的假设不正确,那么请编辑您的问题,对代码的实际意图进行更清楚的解释?TIA.

是您编写的
batchMeterUsageResponse.getValueForField()
方法吗?或者它是来自AWS批处理仪表API的库方法?无论如何,就您所知,
clazz.cast(this.results())
的意图/期望是什么?然后在你回答这个问题之后,我的下一个问题是:为什么会这样做?batchMeterUsageResponse.getValueForField()这是一个由batch meter API提供的库方法“batchMeterUsageResponse.getValueForField()这是一个由batch meter AP提供的库方法…”-谢谢先生。这回答了问题(1)。还有两个问题:(2)据您所知,
clazz.cast(this.results())
的意图/期望是什么?(3)为什么要这样做?TIA。亲爱的先生。即使您不接受我的回答,出于教育原因,我非常想知道是否解决了您报告的编译错误。比我自己的好奇心更重要的是,您的反馈(任何反馈)将为整个社区提供服务。它将来可能会解决其他人的类似问题。TIA.我使用batchMeterUsageResponse.result()而不是batchMeterUsageResponse.getValueForField()是
batchMeterUsageResponse.getValueForField()
您编写的一个方法?还是这个AWS批处理仪表API中的库方法?不管怎样,
clazz.cast(this.results())
-据您所知的意图/期望是什么?然后在您回答这个问题后,我的下一个问题是:为什么这样做?batchMeterUsageResponse.getValueForField()这是一个由batch meter API“batchMeterUsageResponse.getValueForField()提供的库方法这是一个由batch meter AP提供的库方法…-谢谢你,先生。这回答了问题(1)。还有两个问题:(2)
clazz.cast(this.results())的意图/期望是什么
-据您所知?(3)为什么这样做?TIA.亲爱的先生。即使您不接受我的回答,出于教育原因,我非常想知道是否解决了您报告的编译错误。比我自己的好奇心更重要的是,您的反馈(任何反馈)将为整个社区提供服务。它将来可能会解决其他人的类似问题。TIA.我使用batchMeterUsageResponse.result()而不是batchMeterUsageResponse.getV
...
Optional< List > wtTF = batchMeterUsageResponse.getValueForField( RESULTS, List.class );
...
Error:(98, 175) java: incompatible types: java.lang.Class<capture#1 of ? extends java.util.ArrayList> cannot be converted to java.lang.Class<java.util.List<software.amazon.awssdk.services.marketplacemetering.model.UsageRecordResult>>