Scala:“类型 A = XXX”和“最终类型 A = XX”之间的区别?

2024-01-28

假设我有一个抽象类型 AA 和具体类型 XXX:

trait AA {
  type A = XXX
  final type B = XXX
}

在这种情况下,在 AA 的任何子类中,类型 A 和 B 都不能被覆盖,因此看来关键字final是完全多余的。这个说法正确吗?


很难证明它们完全相同,但我会说它们是完全相同的,除了一些无用的怪癖。

无用的怪癖

首先也是最明显的是,它们给出了不同的错误消息。但这还不是全部:技术上可以覆盖A,你不能将它覆盖为除XXX:

trait A1 extends AA {
  override type A = XXX  // Compiles, but doesn't really do anything.
}

另一方面,你永远不能覆盖B:

trait A2 extends AA {
  override type B = XXX  // Does not compile.
}

有什么有用的区别吗?

我再次强调,不存在这种情况。在非常详细的answer https://stackoverflow.com/a/11274901/2093695对这个问题是否可以覆盖类型字段 https://stackoverflow.com/questions/11274729/is-it-possible-to-override-a-type-field, StackOverflow 用户0__ https://stackoverflow.com/users/515054/0注意到

type T = C不可避免地修复T,这相当于制作一个方法final.

and

您现在可以轻松看出必须禁止进一步“覆盖”T

接下来是一些关于如果您可以覆盖的话类型系统将如何不一致的解释T到不同的类型。有关详细信息,请参阅该答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala:“类型 A = XXX”和“最终类型 A = XX”之间的区别? 的相关文章

  • 是否可以为超类实例变量添加JPA注释?

    我正在为两个不同的表创建相同的实体 为了使两个实体的表映射等不同 但仅将其余代码放在一个地方 一个抽象超类 最好的事情是能够在超类中注释通用内容 例如列名 因为它们是相同的 但这不起作用 因为 JPA 注释不会被子类继承 这是一个例子 pu
  • Scala:如何编写将类型化为接收者的实现类型的对象返回的方法

    我知道 Scala 中不推荐使用案例类继承 但为了简单起见 我在以下示例中使用了它 scala gt case class Foo val f String def foo g String Foo this copy f g define
  • 自定义 NIO 文件系统无法通过 SBT 的测试任务加载

    为了进行测试 我使用内存中的 NIOFileSystem执行 memoryfs https github com openCage memoryfs 我以前已经利用过它 并且它似乎运行良好 例如梅文 然而 现在 在SBT项目中 不可能初始化
  • Java中对象类的继承

    当我读java书时 我遇到了 每个类都扩展类 Object 但是如果想要 B 类扩展 A 类 但是 B 类现在将具有多重继承 一个来自 Object 类 一个来自 A 类 如何解决冲突 谁能解释一下吗 它是多级继承 而不是多重 class
  • 如何使用 apply/unapply 方法重现案例类行为?

    我尝试用普通类和伴生对象替换案例类 但突然出现类型错误 编译良好的代码 综合示例 trait Elem A B def C other Elem C A Elem C B other match case Chain head tail g
  • 覆盖超类的实例变量

    为什么我们无法在子类中覆盖超类的实例变量 他也许想尝试并推翻过去的价值初始化变量 例如 而不是这个 这是非法的 public abstract class A String help no help defined somebody sho
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 有没有办法捕获 Spark 中使用通配符读取的多个 parquet 文件的输入文件名?

    我使用 Spark 将多个 parquet 文件读取到单个 RDD 中 并使用标准通配符路径约定 换句话说 我正在做这样的事情 val myRdd spark read parquet s3 my bucket my folder parq
  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • C++ 中的纯虚拟析构函数

    这样写有没有错 class A public virtual A 0 对于抽象基类 至少在 MSVC 中编译 它会在运行时崩溃吗 是的 您还需要实现析构函数 class A public virtual A 0 inline A A 应该足
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • CSS 继承、别名和其他很酷的东西

    有一天 我随机浏览网页 发现了一些程序 可以让你编写 CSS 别名和其他很酷的东西 我现在不记得了 举个例子 我记得你可以这样做 myclass background color red greenfont 其中 greenfont 在其他
  • 使用spark phoenix从表中读取rdd分区号为1

    当我运行我的火花代码时 val sqlContext spark sqlContext val noact table primaryDataProcessor getTableData sqlContext zookeeper table
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • Scala 特性:val/def 和 require

    下面的代码抛出IllegalArgumentException trait T val x Long require x gt 0 object T extends App val y new T val x 42L 而以下情况则不然 tr
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码
  • 在 Scala 中,使用“_”和使用命名标识符有什么区别?

    为什么当我尝试使用时会出现错误 而不是使用命名标识符 scala gt res0 res25 List Int List 1 2 3 4 5 scala gt res0 map gt item toString
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu

随机推荐

  • SimpleStringProperty set() 与 setValue()

    有什么区别set String and setValue String in the SimpleStringProperty http docs oracle com javafx 2 api javafx beans property
  • Boost Fusion:在编译时验证调整后的结构成员排序

    我在用着BOOST FUSION ADAPT STRUCT 我需要检查所有成员是否已声明且顺序正确 所以首先我这样做了 template
  • 根据存储的时区修改 ASP.NET MVC C# 中的日期

    我的问题有两个方面 1 我正在编写一个论坛 但我无法弄清楚如何为论坛用户存储时区 他们将能够设置自己的时区并相应修改论坛上的所有日期 我是否必须创建一个包含时区名称和调整服务器时间的数字的数据库表 NET 是否内置了时区支持 2 一旦我弄清
  • Android Studio:具有两个以上风味维度(风味组)的产品风味组合

    我正在使用 Android Studio v 2 1 gradle 插件 v 2 1 0 开发 Android 应用程序 我的应用程序有各种版本 它们共享许多通用代码 因此我决定使用风格维度和产品风格来在需要时和地点自定义代码和资源 只要我
  • 如何在 R 中获取机器 epsilon?

    R 中是否有一个常量存储机器 epsilon Try Machine double eps and Machine在我的 32 位 Linux 机器上会产生以下结果 R gt Machine double eps 1 2 220e 16 d
  • WebClient.DownloadStringAsync 在 Silverlight 中抛出安全异常

    第一次使用Silverlight 遵循在线教程 我正在创建一个应用程序 允许用户使用 WebClient 从 Digg 网站搜索故事 并将它们显示在 Silverlight 控件的数据网格中 这是代码 private void btnSea
  • 如何将标识符(`proc_macro::Ident`)存储为常量以避免重复?

    我正在编写一个程序宏 我需要多次发出一个非常长的标识符 可能因为卫生 https stackoverflow com q 59618213 2408867 例如 我用quote 创造TokenStreams 但我不想一遍又一遍地重复长标识符
  • 如何获取ConcurrentDictionary的即时快照?

    MSDN https msdn microsoft com en us library dd287131 aspx表明枚举器从返回ConcurrentDictionary并不代表某个时刻的快照ConcurrentDictionary 虽然在
  • 片段中的片段

    我想知道这是否真的是 Android API 中的一个错误 我有这样的设置 1 2 3 是一个在右窗格中加载片段 2 搜索屏幕 的菜单 是一个搜索屏幕 其中包含片段 3 它是一个结果列表 结果列表在多个地方使用 包括作为其本身的功能高级片段
  • ggplot 2.0.0 中的点大小

    自从我更新到 ggplot 版本 2 0 0 后 我在重新创建绘图时遇到了麻烦 似乎我无法像以前那样减少点大小 这是具有很多点的绘图中的一个问题 在下面的示例中 plot1 和plot2 之间的点大小存在合理的差异 plot3 中的点大小至
  • Python-从长度不等的列表中获取所有唯一的组合并进行替换

    注意 这不是标题可能说的重复问题 如果我有一个 list 列表 我需要通过替换从中获取所有组合 import itertools l 1 2 3 1 2 3 1 2 3 n for i in itertools product l if s
  • sqlite 中出现“TYPE_FORWARD_ONLY”错误

    我正在使用 SQLite 和 JDBC 并收到有关 result set 为 TYPE FORWARD ONLY 的错误 PreparedStatement get mileage conn prepareStatement SELECT
  • PHP 中的多线程/多任务

    在 PHP 中 我们通常在编码时不考虑服务器的功能 如今 甚至 PC 也拥有多个内核并处理 64 位数据 据我所知 PHP 引擎本身已针对利用多核进行了优化 我们程序员如何进一步优化代码以利用多核 换句话说 我想知道教我编写代码的技术 这些
  • 有没有办法检查 Android 上是否启用了“从未知来源安装”?

    如果未启用此选项 我想提示用户 这是检查此设置的另一种方法 boolean isNonPlayAppAllowed Settings Secure getInt getContentResolver Settings Secure INST
  • 我可以从 aws s3 恢复下载吗?

    我正在使用 python boto3 库通过蜂窝连接将文件从 s3 下载到物联网设备 该连接通常缓慢且不稳定 有些文件非常大 250Mb 对于这种情况来说很大 并且在下载时网络出现故障并且设备重新启动 我想从设备重新启动时结束的位置恢复下载
  • 使用http响应如何保存pdf文件

    我编写了以下代码来从网页获取内容并将其保存到系统 如果网页是 html 格式 我可以保存它 如果网页是 pdf 格式 我无法保存它 保存后 如果我打开文件 就会出现空白页 我想知道如何保存回复中的 pdf 文件 HttpWebRequest
  • Oracle 查询:选择列中数据的最后更改

    我有一个包含以下列的表 产品 ID 定价 日期 当前 价格 最后 定价 日期 我正在尝试编写一个查询 显示产品更改为当前价格之前的旧价格 Last Price 以便我的结果如下所示 PRODUCT ID PRICE DATE PRODUCT
  • 使用 WordPress TinyMCE wp_editor() 时如何设置占位符文本

    您可以为TinyMCE生成的文本区域设置占位符文本吗wp editor http codex wordpress org Function Reference wp editor http codex wordpress org Funct
  • 如何将javascript插入mysql数据库?

    当我尝试插入 javascript 链接时遇到这个问题 Database error 1064 You have an error in your SQL syntax check the manual that corresponds t
  • Scala:“类型 A = XXX”和“最终类型 A = XX”之间的区别?

    假设我有一个抽象类型 AA 和具体类型 XXX trait AA type A XXX final type B XXX 在这种情况下 在 AA 的任何子类中 类型 A 和 B 都不能被覆盖 因此看来关键字final是完全多余的 这个说法正