Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java.util.Stack没有标记为不推荐?_Java_Stack_Deprecation Warning - Fatal编程技术网

为什么java.util.Stack没有标记为不推荐?

为什么java.util.Stack没有标记为不推荐?,java,stack,deprecation-warning,Java,Stack,Deprecation Warning,对于陈旧的java.util.Stack类有很多批评,比如说应该避免它,因为它不太安全,速度也不太快。 出于兼容性的原因,我可以理解将它保存在rt.jar中(即使我们将永远保存它),但为什么不将它标记为不推荐 人们被这个班级的名字所欺骗,到处使用它。 最好是在编译时看到一条警告,说明他们使用的类已过时。根据Java SE 14提供的Javadoc类文档确实提供了以下指导: Deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先于此类使用。例如: Deque<Inte

对于陈旧的
java.util.Stack
类有很多批评,比如说应该避免它,因为它不太安全,速度也不太快。 出于兼容性的原因,我可以理解将它保存在rt.jar中(即使我们将永远保存它),但为什么不将它标记为不推荐

人们被这个班级的名字所欺骗,到处使用它。
最好是在编译时看到一条警告,说明他们使用的类已过时。

根据Java SE 14提供的Javadoc类文档确实提供了以下指导:

Deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先于此类使用。例如:

  Deque<Integer> stack = new ArrayDeque<Integer>();
Deque stack=new ArrayDeque();

根据Java SE 14的Javadoc类文档包含以下指南:

Deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先于此类使用。例如:

  Deque<Integer> stack = new ArrayDeque<Integer>();
Deque stack=new ArrayDeque();


实际上,将其标记为弃用仅适用于他们希望以后实际删除它的情况。这种情况很少发生,例如java.util.VectorIt是一个很好的问题,但是猜测,所以可能不太适合堆栈溢出。现代版本的编译器省去了大部分不必要的锁,因此Jon Skeet的反对在2020年并不重要。我认为你错了,@Thorbjørnravandersen。方法在Java1.1中被弃用(23年前),但我不知道公共API的任何部分已经被删除。最近,他们开始额外标记一些不推荐的项目“删除”。因此,相反地,在我看来,标记
Stack
而不使用“for remove”标记不会有什么坏处。我遗漏了什么吗?别忘了哈希表。如果我们要弃用/删除预收集api,让我们将它们全部删除!我一直不明白为什么Stack类是一个顺序列表而不是一个链表。实际上,将其标记为不推荐只是为了以后实际删除它。这种情况很少发生,例如java.util.VectorIt是一个很好的问题,但是猜测,所以可能不太适合堆栈溢出。现代版本的编译器省去了大部分不必要的锁,因此Jon Skeet的反对在2020年并不重要。我认为你错了,@Thorbjørnravandersen。方法在Java1.1中被弃用(23年前),但我不知道公共API的任何部分已经被删除。最近,他们开始额外标记一些不推荐的项目“删除”。因此,相反地,在我看来,标记
Stack
而不使用“for remove”标记不会有什么坏处。我遗漏了什么吗?别忘了哈希表。如果我们要弃用/删除预收集api,让我们将它们全部删除!我一直不明白为什么堆栈类是顺序列表而不是链表。这会给出编译时警告吗?@ice1000很好,它不会。我想,尽管(据我所知)仍能正常工作,但对于使用它的遗留代码来说,如果它被弃用,对代码库的所有者来说会很麻烦。但对于新代码,编译时警告确实有用。也就是说,Javadoc文档确实为开发人员指明了正确的方向。我相信该文档是从Java 6开始的。@ice1000进一步解释说,
Stack
绝对不应用于新代码,但仍应像在遗留代码库中一样工作。相比之下,就我所知,像这样的方法应该永远不会被使用,包括在遗留代码库中,并且删除它也是一个优先事项,同样在遗留代码库中也是如此。我还没有温习过具体的指导原则。
@Deprecated
注释的使用,但我可以想象这与此有关。@ice1000也就是说,一个更激进的弃用策略可能是有意义的,例如一个包含对
java.util.Stack
弃用的策略。但它并非没有缺点。Java的优点和缺点之一是它以各种方式保持了很多向后兼容性;这往往会导致该语言在其他方面的运行更加缓慢和粗糙,但这也意味着开发人员花在更新和重构代码库上的时间要少得多,这些代码库以前可以工作,但由于给定语言的新版本出现而中断。这是否给出了编译时警告?@ice1000很好的一点,事实并非如此。我想,尽管(据我所知)仍能正常工作,但对于使用它的遗留代码来说,如果它被弃用,对代码库的所有者来说会很麻烦。但对于新代码,编译时警告确实有用。也就是说,Javadoc文档确实为开发人员指明了正确的方向。我相信该文档是从Java 6开始的。@ice1000进一步解释说,
Stack
绝对不应用于新代码,但仍应像在遗留代码库中一样工作。相比之下,就我所知,像这样的方法应该永远不会被使用,包括在遗留代码库中,并且删除它也是一个优先事项,同样在遗留代码库中也是如此。我还没有温习过具体的指导原则。
@Deprecated
注释的使用,但我可以想象这与此有关。@ice1000也就是说,一个更激进的弃用策略可能是有意义的,例如一个包含对
java.util.Stack
弃用的策略。但它并非没有缺点。Java的优点和缺点之一是它以各种方式保持了很多向后兼容性;这往往会导致语言在其他方面的移动更加缓慢和粗糙