热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Scala2.12告诉我Stack已被弃用,如何完全替换它(以及为什么我在IntelliJ中看不到正确的警告)

如何解决《Scala2.12告诉我Stack已被弃用,如何完全替换它(以及为什么我在IntelliJ中看不到正确的警告)》经验,为你挑选了1个好方法。

我设置了一个Scala项目,并从http://www.scalatest.org/添加了这个片段

import collection.mutable.Stack
import org.scalatest._

class ExampleSpec extends FlatSpec with Matchers {

  "A Stack" should "pop values in last-in-first-out order" in {
    val stack = new Stack[Int]
    stack.push(1)
    stack.push(2)
    stack.pop() should be (2)
    stack.pop() should be (1)
  }

  it should "throw NoSuchElementException if an empty stack is popped" in {
    val emptyStack = new Stack[Int]
    a [NoSuchElementException] should be thrownBy {
      emptyStack.pop()
    } 
  }
}

和IntelliJ(IDEA 2017.1.2)向我显示以下用法的警告new Stack[Int]:

在此输入图像描述

搜索警告向我展示了这个问题:https: //issues.scala-lang.org/browse/SI-9068

但我仍然有这些问题:

    我得到一个分为两个区域的弹出窗口.这是否意味着有两个警告,每个警告有两行.什么是真实的信息?对于第二个区域,我看到Reference必须加前缀并且正在构建中.

    为什么我没有看到正确的弃用警告,就像它在这里添加:https://github.com/scala/scala/pull/5260/files#diff-1ab096eae7e5571b6410a123567aac0aR57

    在GitHub/API文档他们SAI:Use a List assigned to a var instead但我不能只替换StackList,因为.push()不适用于该类.或者我应该完全切换到List API?使用var或分配列表有什么区别vallist.add(2)即使分配了项目,我也无法添加项目val吗?

我通过Homebrew安装了Scala 2.12.2.我不确定我是IntelliJ它是否使用自己的版本,因为我需要通过IntelliJ下载它,但无论如何它是相同的版本,所以我的设置看起来像这样: 在此输入图像描述


BTW:在终端/ Scala REPL中我得到了这个输出

scala> val stack = new Stack[Int]
:14: warning: class Stack in package mutable is deprecated (since 2.12.0): Stack is an inelegant and potentially poorly-performing wrapper around List. Use a List assigned to a var instead.
       val stack = new Stack[Int]
                       ^

所以适当的弃用警告似乎在那里工作.



1> Assaf Mendel..:

不推荐的消息

通常,当有不推荐使用的函数时,您只能看到您看到的一般响应.要获取详细消息,您应该使用-deprecation进行编译.要更改此使用设置 - >构建,执行,部署 - >编译器 - > scala编译器并检查相关选项(在您的情况下弃用警告,但其余大多数可能是个好主意)

参考必须带有前缀警告

这是一个完全不相关的警告.使用可变类时,scala样式是使用mutable作为前缀.即使用这个:

import collection.mutable    
val a = new mutable.Stack[Int]

代替

import collection.mutable.Stack    
val a = new Stack[Int]

这是因为scala中的默认思维模式通常应该是使用不可变集合,除非您有充分的理由不这样做.

如果这让您感到困扰,您可以随时关闭此检查.

怎么做而不是堆栈

删除堆栈的原因是它只是一个包装列表.Push只是添加了一个新的头部,而pop则只是采用尾部.

这意味着如果你有:

val a = new mutable.Stack
a.push(XXX)
a.pop(XXX)

你可以用以下代替它:

var a = new List
a = XXX +: a
a = a.tail

请注意,通常,您可以在此处使用不可变列表.

编辑

为了确保它更容易理解,在var a = new List中创建的List应该替换为实际的list列表.

标准方法是使用标准的scala创建方法,例如:

var a = List[Int]()  
var a: List[Int] = Nil 

但如果需要更多功能,也可以根据需要选择其他具体列表.


推荐阅读
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • 在TypeScript中,我定义了一个名为 `Employee` 的接口,其中包含 `id` 和 `name` 属性。为了使这些属性可选为空,可以通过使用 `| null` 或 `| undefined` 来扩展其类型定义。例如,`id: number | null` 表示 `id` 可以是数字或空值。这种类型的灵活性在处理不确定的数据时非常有用,可以提高代码的健壮性和可维护性。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 初探设计模式之代理模式:原理与应用解析
    在设计模式中,代理模式通过一个代理对象来控制对真实对象的访问。UML图展示了代理类(如MathProxy)维护了一个引用,使得代理能够访问实际的主题对象。代理模式不仅能够延迟初始化昂贵的对象,还能在访问前后添加额外的操作,如权限检查或日志记录。这种模式在远程服务调用、虚拟代理和智能引用等方面有广泛应用。 ... [详细]
  • Pentaho Data Integration 中 BaseStep 类 getOutputRowSets 方法详解与代码实例 ... [详细]
  • 在使用sbt构建项目时,遇到了“对象apache不是org软件包的成员”的错误。本文详细分析了该问题的原因,并提供了有效的解决方案,包括检查依赖配置、清理缓存和更新sbt插件等步骤,帮助开发者快速解决问题。 ... [详细]
author-avatar
mobiledu2502936307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有