groovy扩展算子的Java翻译

groovy扩展算子的Java翻译,groovy,groovy-spread,Groovy,Groovy Spread,鉴于: 在java中,cars*.make在幕后是如何工作的?它是否在堆中创建了一个新的映射对象并合并了两个映射?我查看了字节码,所涉及的唯一映射是为初始化Car对象而创建的映射 初始化两个car对象后,它们将被放入列表中。spread运算符(在本例中)转换为对的调用 查看该方法的源代码,您会发现它基本上只是创建一个新的ArrayList,并添加每个对象的请求属性(在本例中为make): class Car { String make String model } def car

鉴于:


在java中,
cars*.make
在幕后是如何工作的?它是否在堆中创建了一个新的映射对象并合并了两个映射?

我查看了字节码,所涉及的唯一映射是为初始化
Car
对象而创建的映射

初始化两个car对象后,它们将被放入列表中。spread运算符(在本例中)转换为对的调用

查看该方法的源代码,您会发现它基本上只是创建一个新的
ArrayList
,并添加每个对象的请求属性(在本例中为
make
):

class Car {
    String make
    String model
}
def cars = [
       new Car(make: 'Peugeot', model: '508'),
       new Car(make: 'Renault', model: 'Clio')]     

def makes = cars*.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;
}