gpt4 book ai didi

java - 相同的链表代码在 groovy 和 java 之间有不同的行为,为什么

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:45 26 4
gpt4 key购买 nike

我正在使用 linkedlist 作为 groovy 中的堆栈

正如 doc 所说,pop() 从第一个开始拿 elm

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 的一个“特性”。 Default Groovy Methods被描述为 此类定义了新的 groovy 方法,这些方法出现在 Groovy 环境中的普通 JDK 类中。

DefaultGroovyMethods 提供的方法之一是 pop() ,它被描述为:从列表中删除最后一项。所以看起来 Groovy 正在编织 pop() 的不同实现,这与 LinkedList 默认为您提供。

A bug report几年前针对 GDM 提交的文件对其进行了最好的描述,并提供了一些额外的评论:LinkedList 似乎实现了 List 和 pop/push 方法,因此类方法不应被 DGM 方法遮蔽。只有当我们在 DGM 中有一个 LinkedList#pop/push 方法时,它才应该不同。

关于java - 相同的链表代码在 groovy 和 java 之间有不同的行为,为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com