问题标签 [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.

0 投票
1 回答
1094 浏览

android - Android Room,如何保存一个实体,其中一个变量是密封的类对象

我想在我的 Room 数据库中保存一个对象,其中一个变量可以是 on 类型或另一个。我认为密封类是有意义的,所以我采用了这种方法:

甚至这个,但没有必要。我发现这个给了我更多的错误,因为它不知道如何处理打开的 val,所以如果我找到第一个版本的解决方案,无论如何我都会很高兴。

然后是实体类

我还创建了一个 TypeConverter 来将其转换为字符串,因此我认为这不是问题。

首先,这可能吗?我认为这应该以与抽象类类似的方式起作用,但我也没有设法找到一个可行的解决方案。如果不可能,当我想保存一些可能是一种或另一种类型的数据(如果不是密封类)时,我应该采取哪种方法?

0 投票
2 回答
61 浏览

kotlin - 密封类与现有类?

我正在实现一个自定义键盘,我将键 0-9 和小数分隔符表示为 Button 对象。然后我有一个最后一个键,它是退格键,它被表示为一个 ImageButton。

当我处理点击事件时,我知道如果用户点击了一个按钮,他们正在向文本字段添加一个元素,如果他们点击了一个 ImageButton,他们正在从文本字段中删除最后一个元素。

由于键盘只有两种可能的按钮类型,我想用 when 块实现这个逻辑,而不使用 else 分支。可能吗?查看密封的课程文档,我认为这可能不是,只是要求确保。

我想做这样的事情:

0 投票
0 回答
76 浏览

kotlin - 了解 Kotlin 中的密封类 - 非顶级密封类在文件中不可见

我目前正在学习kotlin 的密封类

根据文档

密封类可以有子类,但所有子类都必须与密封类本身在同一个文件中声明

但是,我的测试似乎表明还有比这更多的细节。

我发现前面引用的语句仅适用于顶级(包级)声明。

例如,对象内的密封类只能由该密封类的嵌套成员扩展,不能跨同一个文件扩展

问题:

  • 还有其他我不知道的限制吗?

  • 我的结论/发现准确吗?

测试源代码

0 投票
0 回答
1562 浏览

android - Retrofit & Moshi:使用密封类和泛型获取请求 - 有可能吗?

我有一个密封类来处理我的改造响应的状态。它的成员采用通用类型。我想让 Retrofit 能够返回正确的对象,但我遇到了这个错误:Unable to create converter for com.my.app.DataResult<?> - Cannot serialize abstract class com.my.app.DataResult

这是我的 DataResult 类:

这是我当前实现的其余部分:

上面的代码很大程度上是受this answer to another question的启发,但我正在尝试将泛型添加到组合中,因此我不必手动将每个请求都放入接口中。有没有可能?我已经尝试了几个小时,也尝试为密封类构建适配器但失败了。有人有很好的资源如何做到这一点?

正如您在代码中看到的那样,我也希望能够接收列表。这里的任何提示也非常感谢。

0 投票
1 回答
63 浏览

c# - 防止从c#中的字符串类继承的原因是什么?

我读了一些文章,但其中大部分都是抽象的,我无法回答我的问题。我知道抽象类和密封类之间的区别。但是当我的讲师解释他在 c# 中所说的区别时,当您想让一些开发人员遵循您的设计时,您需要使用抽象类,这可以为您的代码提供一些安全性并提供示例和我理解他的意思,但是当他解释密封类时,他说我们不能从字符串类继承,因为它是密封类。所以这是使用密封类并且没有给出原因。

0 投票
2 回答
128 浏览

kotlin - KOTLIN:当条件子句与另一个子句结合时重构一个大回报

'这是一个设计和技术代码方面的问题,所以在我对一个随机项目进行一些重构以使其更新时,我遇到了以下部分,一个密封类上的中缀函数正在执行某种验证:

所以基本上,发生了什么是糖语法添加,它允许在其他部分像这样调用代码:

if (task.state allowsOperation operation) doSomething()

但是,我发现那堆特定的代码看起来很难看,我想不出另一种合理的方法来做这件事,但同时又不会产生太多的变化。

TaskState 和 TaskOperation 只是一些密封类:

你对如何重构这种类型的东西有什么建议吗?

0 投票
1 回答
259 浏览

java - 密封类修饰符如何帮助 Java 中的模式匹配?

最新的 Java 版本 15 提供了新功能 -sealed修饰符。我通过了JEP,它说:

密封的类和接口限制了哪些其他类或接口可以扩展或实现它们。

目标:

  • 允许类或接口的作者控制负责实现它的代码。
  • 提供比访问修饰符更具声明性的方式来限制超类的使用。
  • 通过支持模式的详尽分析来支持模式匹配的未来方向。

第一个和第二个非常简单,但第三个很难遵循。有人可以解释一下,请问如何sealed提供帮助pattern matching

0 投票
1 回答
618 浏览

java - When are sealed classes and records used together in Java?

JEP on sealed classes says :

Sealed classes do not depend on records (JEP 384) or pattern matching (JEP 375), but they work well with both.

What does it mean "work well"? Are there any recommendations to use the combination in some specific cases?

0 投票
1 回答
160 浏览

c# - 如何同时创建从密封类和公共类继承的类

我在项目的许多类中使用了一个密封的和公共的类对象。

我需要创建一个新的类对象,其中包含两个类中组合的所有属性,而不是重复所有属性。以下可以将 pagerequest 属性引入新类,但我如何设法获取 Customer 类的属性。我不能继承 Customer 的属性,因为它是一个密封类。从 Customer 中删除 seal 可能不是一个好主意,因为它已被许多应用程序领域使用,即使这样我也不能同时将 Customer 和 PageRequest 作为基类。如果有更好的方法,我可以更改现有的 Customer 类

像下面这样重复 NewClass 中的属性是否更好?

这个新的类对象将用作新 api 获取请求查询字符串的一部分,其中用户必须提供一个或多个(名字、姓氏、地址)和 currentpage、perpage、sortby 作为输入参数,需要更好的方法来适应所有请求的参数。我想使用这个类作为获取请求(http://someendpoint&firstname=a&lastname=b&currentpage=1&perpage=10

0 投票
2 回答
2400 浏览

android - 资源包装密封类,数据绑定错误

我在使用Resource环绕我的数据时遇到了一个小问题,我不知道如何在我的数据绑定中使用它。

密封类

我有这个val product: LiveData<Resource<NetworkProductDetails>>

我遇到了一个问题,因为viewModel.product不是NetworkProductDetails但是Resource<NetworkProductDetails>我的 XML/Databinding 不知道如何处理它。


我找到了一种工作方式,但我想知道是否有更优雅的方式。

第一个解决方案:

第二种解决方案:

在我发表的评论中。