5

linkedlist在 groovy 中用作堆栈

正如医生所说,pop()从一开始就拿榆木

Stack Method  Equivalent Deque Method  
push(e)       addFirst(e) 
pop()         removeFirst()

所以linkedlist[1,2,3] 应该 pop() 1 2 3

它在 Java 中确实如此,但在 groovy 中却没有。为什么?

下面测试

A.java

import java.util.*;

public class A{


    public static void main(String[] args){

        String[] x = "1/2/3/".split("/");
        LinkedList <String> stack = new LinkedList<String>(Arrays.asList(x));
        System.out.println(stack.pop());
    }
}

编译运行

$ javac A.java
$ java A
1

在 groovy 中运行

$ ln -s A.java A.groovy
$ groovy A.groovy
3

这是我的 java 和 groovy 版本

$ java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

$ groovy -version
Groovy Version: 2.1.5 JVM: 1.6.0_51 Vendor: Apple Inc. OS: Mac OS X
4

1 回答 1

6

这似乎是 groovy 的“功能”。默认 Groovy 方法描述为This class defines new groovy methods which appear on normal JDK classes inside the Groovy environment.

提供的方法之一DefaultGroovyMethodspop(),它被描述为:Removes the last item from the List.因此,Groovy 似乎正在编织一个不同的实现,该实现与默认情况下为您提供的实现pop()冲突。LinkedList

几年前针对 GDM 提交的错误报告对此进行了最好的描述,并提供了一些额外的评论:LinkedList seems to implement List and a pop/push method, thus the classes method should not be shadowed by a DGM method. Only if we had a LinkedList#pop/push method in DGM, it should be different.

于 2013-10-18T03:29:19.820 回答