Java 为什么io.cucumber.datatable.datatable asMaps(String.class,String.class).get(0)返回Map<;对象,对象>;而不是地图<;字符串,字符串>;

Java 为什么io.cucumber.datatable.datatable asMaps(String.class,String.class).get(0)返回Map<;对象,对象>;而不是地图<;字符串,字符串>;,java,cucumber,Java,Cucumber,如果我分析io.cucumber.datatable.datatable,我会遇到以下问题: 我将dataTable(io.cumber.dataTable.dataTable)作为方法中的参数 我试图通过dataTable.asMaps(String.class,String.class)将其转换为映射列表 即使我为键和值指定了typeString.class,映射还是创建为Map 因此我不能直接使用它,例如在流中: dataTable.asMaps(String.class, String.

如果我分析io.cucumber.datatable.datatable,我会遇到以下问题:
我将
dataTable
(io.cumber.dataTable.dataTable)作为方法中的参数

我试图通过
dataTable.asMaps(String.class,String.class)
将其转换为映射列表
即使我为键和值指定了typeString.class,映射还是创建为Map

因此我不能直接使用它,例如在流中:

dataTable.asMaps(String.class, String.class).stream()
                .forEach(row -> Boolean.parseBoolean(row.get("enabled")));

但首先我必须将其存储在变量中:

List<Map<String, String>> rows = dataTable.asMaps(String.class, String.class);
// BTW, this seems to be sufficient: List<Map<String, String>> rows = dataTable.asMaps();
rows.stream().forEach(row -> Boolean.parseBoolean(row.get("enabled")));
List rows=dataTable.asMaps(String.class,String.class);
//顺便说一句,这似乎足够了:List rows=dataTable.asMaps();
rows.stream().forEach(row->Boolean.parseBoolean(row.get(“enabled”));

如果不考虑这些参数(String.classString.class),为什么会有这些参数?

这些参数用于查找数据到所需类型的转换。签名是

公共列表ASMAP(类型keyType,类型valueType)
由于参数类型未参数化,编译器无法从调用中推断
K
V

我还发现了让我感到困惑的地方,因为有了签名就可以了:

公共列表ASMAP(类键类型,
类值类型)
这将使编译器推断映射键和值类型为字符串。我不知道该文档所指的cucumber版本


但是,对于这两种方法,还有一个特定的字符串版本:
asMaps()
不带任何参数时应始终返回一个
列表
,因此应至少涵盖您的情况。

是什么导致您认为它们是作为
映射创建的?你的第一个例子到底出了什么问题?@OhleC谢谢@OhleC。顺便说一句,我在使用时发现,由于DataTable已从
cucumber.api.DataTable
移动到
io.cucumber.DataTable.DataTable
。通过这次迁移,签名也被更改为
List asMaps(Type keyType,Type valueType)
,并按照您的建议提供了新的
List asMaps()