问题标签 [sealed-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - 从 Kotlin 中的密封类扩展数据类
我有一组共享一些公共字段的数据类,所以理想情况下,我想在超类型中声明它们(本例中为 Message),并且如果他们需要访问这些公共字段,则能够编写对超类型进行操作的函数字段(本例中的 messageId)。
我试图通过从密封类扩展我的数据类来实现这一点。
数据类可以扩展密封类,但我不确定它们如何/是否可以接受“超类型”密封类所需的参数。
从密封类扩展常规类编译得很好。
/li>但是,将其更改为数据类不会编译(“数据类主构造函数必须只有属性 (val/var) 参数。”)。
/li>将参数声明为属性也不会编译(“'messageId' 隐藏超类型'Message' 的成员并需要'覆盖'修饰符'”)。
/li>打开超类型属性并在每个基类中覆盖它可以很好地编译:
/li>
理想情况下,我想要接近选项 2 的东西——它让我能够结合两全其美。
否则,似乎我的选择要么使用选项 1 处理我自己的数据类功能(复制、哈希码、equals 等),要么通过使用选项 4 打开超类型属性来妥协。
kotlin - Kotlin 中的密封类,不兼容类型错误
我有以下 Kotlin 代码。一个称为密封类Animal
,以及两个对象类Dog
并Cat
继承自密封类Animal
。我when
在 is Cat 案例的子句中收到此错误。
为什么会出现此错误?如何在 Kotlin 中使用密封类来进行这种类型的操作?密封类是做多态性的好选择吗?
enums - 使用关联类型时的密封类与枚举
我想创建一个基于Int
. 我可以使用sealed class
and获得相同的结果,enum
并且想知道一个是否比另一个更好。
使用sealed class
:
使用enum
:
它们在性能方面是否相当?有没有更好的 kotlin 方法来实现相同的结果?
android - 我如何在 Retrofit2 中使用密封类作为返回类型
我的密封课
改造2请求
当我调用以下代码时
我遇到了一个例外
引起:java.lang.RuntimeException:无法调用没有参数的私有 ....TranslationResponse()
PS如果替换Observable<TranslationResponse>
为Observable<Success>
我的代码有效
generics - 将泛型类型传递给嵌套的密封类
是否可以?我如何向编译器解释它的相同类型(BR)扩展了相同的类?下面的代码失败
kotlin - 当“when”语句未涵盖所有实现时,强制编译器发出错误
也许这是一个荒谬的问题。我有一个接收Command
(密封类)并返回的方法Unit
,我希望编译器崩溃是否所有when
分支都没有实现:
上面的代码没问题,但我不希望它编译。
当方法返回任何不同于 的东西时Unit
,它不会编译:
我想要这种行为,但什么都不返回(Unit
)。我理解为什么会发生这种情况,但我想知道是否有任何方法可以更改我的代码以实现我想要的。我需要涵盖所有Command
实现,而不会忘记以后可能添加的任何人。
android - 此代码如何引发 NoWhenBranchMatchedException?
在我们最近发布的应用程序中,我们看到kotlin.NoWhenBranchMatchedException
向 Fabric/Crashlytics 报告了少数 s。
这是有问题的代码片段:
和类定义:
我对这段代码在理论上如何抛出异常感到困惑——正如你所看到的,我们甚至引入了这个handled
值,只是为了强制编译器确保所有情况都得到处理......
c# - 为什么我们需要密封类?
我知道 Sealed 类的功能。它不可继承。但我的问题是为什么我们需要一个密封类?如果不继承属性和方法是动机,为什么不将它们声明为私有呢?
c# - 密封关键字防止类的继承
密封关键字防止类的继承。继承是面向对象程序的特征之一。这是否意味着密封不是哎呀概念?
intellij-idea - 如何在 IntelliJ IDEA 中配置用于暂存文件的 Kotlin 版本?
我最近安装了 IntelliJ IDEA 以尝试学习 Kotlin。我已经建立了一个 Kotlin 项目并将 IDEA 配置为使用 Kotlin 插件的最新稳定版本 (1.2.71-release-IJ2018.2-1)。
如果在项目文件中执行以下代码(例如src/main.kt
),则可以正常工作:
但是,如果我尝试在暂存文件中执行此操作,则会收到以下错误:
从Kotlin 文档中,我可以看到这是因为密封类的这种用法仅在 Kotlin 1.1+ 中有效。这意味着项目文件使用 >= Kotlin 1.1 执行,而暂存文件使用 < Kotlin 1.1。
我想知道为什么 Kotlin 暂存文件似乎没有使用与主要项目文件相同的 Kotlin 版本,以及我如何指定用于执行暂存文件的 Kotlin 版本。
下面是我用于临时文件的运行/调试配置示例:
执行暂存文件时,我看到暂存输出窗格中出现以下命令(为清晰起见更改了格式):