java - 为什么 io.cucumber.datatable.DataTable asMaps(String.class, String.class).get(0) 返回 Map
问题描述
如果我解析io.cucumber.datatable.DataTable
我遇到以下问题:
我有dataTable
(io.cucumber.datatable.DataTable)作为方法中的参数。
我尝试将其转换为地图列表dataTable.asMaps(String.class, String.class)
。
即使我为键和值指定类型String.class,映射创建为 Map< Object , Object >。
所以我不能直接使用它,例如在流中:
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")));
如果不考虑这些参数( String.class,String.class ),为什么会有这些参数?
解决方案
这些参数用于查找您的数据到所需类型的转换。签名是
public <K, V> List<Map<K, V>> asMaps(Type keyType, Type valueType)
由于参数类型未参数化,编译器无法从您的调用中推断K
和推断。V
我还发现这个 javadoc让我感到困惑,因为那里的签名可以工作:
public <K,V> List<Map<K,V>> asMaps(Class<K> keyType,
Class<V> valueType)
这将使编译器将映射键和值类型推断为字符串。我不知道文档指的是哪个版本的黄瓜。
但是,两者都有一个特定的 String 版本:asMaps()
没有任何参数应始终返回 aList<Map<String, String>>
所以至少应该涵盖您的情况。
推荐阅读
- c++ - 将 write_xml 提升到包含在 back_insert_device 中的向量会产生 0 大小的向量
- python - 使用无服务器框架为 AWS Lambda 构建和使用本地包
- algorithm - 为什么我的 Rust StackDFS 实现会产生不正确的结果?
- time - 提取连续几年出现的ID
- python - django中的models.ForeignKey()
- typescript - TypeScript:差异通用约束与参数类型
- r - R:MICE 和向后逐步回归
- swift - 消息气泡的双击识别器(Messagekit)
- android - Android Retrofit 2:以编程方式将超时时间增加 10 秒
- javascript - 将日期转换为 UTC 时间戳