我试图找到一种方法将任何 地图投射到我的班级 A 的实例,使用" as& #34; operator.in Groovy,像这样:
import java.util.concurrent.ConcurrentHashMap;
class A {
def list = new ArrayList();
A( Map map ) {
for( e in map.entrySet() ) {
list.add( e.getKey );
list.add( e.getValue() );
}
}
};
def map = [ key1 : 'value1', key2 : 'value2' ] as ConcurrentHashMap;
def instA = map as A;
assert instA.list.containsAll( [ 'key1', 'value1', 'key2', 'value2' ] );
这是一个假设的例子,但它显示了问题的本质。
答案 0 :(得分:1)
一旦我在问题中解决了拼写错误,(并用更常规的解决方案替换了for循环),这似乎有效:
import java.util.concurrent.ConcurrentHashMap;
class A {
def list
A( Map map ) {
list = map.inject([]) { l, key, value -> l << key << value }
}
}
def map = [ key1 : 'value1', key2 : 'value2' ] as ConcurrentHashMap
def instA = map as A
assert instA.list == [ 'key1', 'value1', 'key2', 'value2' ]