我正在使用linkedlist
作为时髦的堆栈
正如Doc所说,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
在时髦中奔跑
$ 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
似乎是时髦的一个"特征"。默认的 Groovy 方法描述为 This class defines new groovy methods which appear on normal JDK classes inside the Groovy environment.
DefaultGroovyMethods
提供的方法之一是pop(),它被描述为: 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.