为什么 io.cucumber.datatable.DataTable asMaps(String.class, String.class).get(0) returns Map<Object,Object> 而不是 Map<String,String>
Why io.cucumber.datatable.DataTable asMaps(String.class, String.class).get(0) returns Map<Object,Object> and not Map<String,String>
如果我解析 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")));
See an error shown by Intellij IDEA
但首先我必须将它存储在变量中:
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
。
我还发现 this javadoc 这让我感到困惑,因为那里的签名 会 起作用:
public <K,V> List<Map<K,V>> asMaps(Class<K> keyType,
Class<V> valueType)
这将使编译器将映射键和值类型推断为字符串。我不知道该文档指的是哪个版本的黄瓜。
然而,两者都有一个特定的字符串版本:asMaps()
没有任何参数应该总是 return 一个 List<Map<String, String>>
所以至少应该涵盖你的情况。
如果我解析 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")));
See an error shown by Intellij IDEA
但首先我必须将它存储在变量中:
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
。
我还发现 this javadoc 这让我感到困惑,因为那里的签名 会 起作用:
public <K,V> List<Map<K,V>> asMaps(Class<K> keyType,
Class<V> valueType)
这将使编译器将映射键和值类型推断为字符串。我不知道该文档指的是哪个版本的黄瓜。
然而,两者都有一个特定的字符串版本:asMaps()
没有任何参数应该总是 return 一个 List<Map<String, String>>
所以至少应该涵盖你的情况。