我在groovy中使用linkedlist
作为堆栈
正如文档所说,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
答案 0 :(得分:6)
这似乎是groovy的“特征”。 Default Groovy Methods被描述为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
默认为您提供的内容相冲突。
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.