ext*_*ice 5 groovy groovy-spread
鉴于:
class Car {
String make
String model
}
def cars = [
new Car(make: 'Peugeot', model: '508'),
new Car(make: 'Renault', model: 'Clio')]
def makes = cars*.make
Run Code Online (Sandbox Code Playgroud)
如何cars*.make
在java中的幕后工作?它是否在堆中创建一个新的Map对象并组合两个映射?
我查看了字节码,唯一涉及的映射是为初始化Car
对象而创建的映射。
一旦两个 car 对象被初始化,它们就会被放入一个列表中。展开运算符转换(在本例中)为对 的调用ScriptBytecodeAdapter.getPropertySpreadSafe
。
查看该方法的来源,您会发现它基本上只是创建一个新对象ArrayList
并添加make
每个对象的请求属性(在本例中为):
public static Object More ...getPropertySpreadSafe(Class senderClass, Object receiver, String messageName) throws Throwable {
if (receiver == null) return null;
List answer = new ArrayList();
for (Iterator it = InvokerHelper.asIterator(receiver); it.hasNext();) {
answer.add(getPropertySafe(senderClass, it.next(), messageName));
}
return answer;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1719 次 |
最近记录: |