如何为集合文字指定目标类型?
How to specify target type for collection literals?
我正在尝试使用目标类型来指定集合文字的类型:
val java.util.HashMap<String,String> map = #{
'a' -> 'b'
}
但我得到:
HelloWorld.java:212: error: incompatible types: Set<Object> cannot be converted to HashMap<String,String>
final HashMap<String, String> map = Collections.<Object>unmodifiableSet(CollectionLiterals.<Object>newHashSet(_mappedTo, _mappedTo_1, _mappedTo_2, _mappedTo_3));
请注意,这是一个 java 编译错误,而不是 Xtend 错误。出于某种原因,Xtend 试图生成 Set
,即使目标类型是 HashMap
。
但是,如果我将目标类型更改为 Map
,它会按预期生成地图。
In addition xtend supports collection literals to create immutable collections and arrays, depending on the target type
所以我认为我可以控制返回的不可修改地图的类型。
Xtend 版本:2.9.0
您不能按照您想要的方式进行 - 隐式转换不会为您更改地图文字的类型(您遇到的错误是编译器工件 - 它会在成对集合和地图文字之间混淆)。你可以做的是
val map = Maps.newHashMap(#{
'a' -> 'b'
})
这可能更少打字 ;) 地图来自 com.google.common.collect,您将在依赖项中与 xtend 一起获得。
引用自Xtend doc:
In addition xtend supports collection literals to create immutable collections and arrays, depending on the target type.
表示 一个集合, 或 一个数组——因为两者的字面语法是相同的:
val myList = #['Hello', 'World']
val String[] myArray = #['Hello', 'World']
集合和映射的语法不同,因此无需在此处指定目标类型:
val mySet = #{'Hello', 'World'}
val myMap = #{'a' -> 1, 'b' -> 2}
如果您坚持目标类型,请使用例如newHashMap
:
val myHashMap = newHashMap('a' -> 1, 'b' -> 2)
我正在尝试使用目标类型来指定集合文字的类型:
val java.util.HashMap<String,String> map = #{
'a' -> 'b'
}
但我得到:
HelloWorld.java:212: error: incompatible types: Set<Object> cannot be converted to HashMap<String,String>
final HashMap<String, String> map = Collections.<Object>unmodifiableSet(CollectionLiterals.<Object>newHashSet(_mappedTo, _mappedTo_1, _mappedTo_2, _mappedTo_3));
请注意,这是一个 java 编译错误,而不是 Xtend 错误。出于某种原因,Xtend 试图生成 Set
,即使目标类型是 HashMap
。
但是,如果我将目标类型更改为 Map
,它会按预期生成地图。
In addition xtend supports collection literals to create immutable collections and arrays, depending on the target type
所以我认为我可以控制返回的不可修改地图的类型。
Xtend 版本:2.9.0
您不能按照您想要的方式进行 - 隐式转换不会为您更改地图文字的类型(您遇到的错误是编译器工件 - 它会在成对集合和地图文字之间混淆)。你可以做的是
val map = Maps.newHashMap(#{
'a' -> 'b'
})
这可能更少打字 ;) 地图来自 com.google.common.collect,您将在依赖项中与 xtend 一起获得。
引用自Xtend doc:
In addition xtend supports collection literals to create immutable collections and arrays, depending on the target type.
表示 一个集合, 或 一个数组——因为两者的字面语法是相同的:
val myList = #['Hello', 'World']
val String[] myArray = #['Hello', 'World']
集合和映射的语法不同,因此无需在此处指定目标类型:
val mySet = #{'Hello', 'World'}
val myMap = #{'a' -> 1, 'b' -> 2}
如果您坚持目标类型,请使用例如newHashMap
:
val myHashMap = newHashMap('a' -> 1, 'b' -> 2)