android - 有没有办法只对数据类类型进行扩展功能?
问题描述
我的问题是我想要一个仅适用于数据类的扩展函数。
例如,假设我有多个数据类。
data class Person(
val name: String,
val age: Int
)
data class Car(
val color: Color,
val brand: String
)
等等。
现在我想创建一个仅为数据类扩展的扩展函数,而不是像这样我必须为每个类创建扩展函数。
例如我的扩展功能:
fun Person.convertToJson() : String {
return Gson().toJson(this)
}
fun Car.convertToJson() : String {
return Gson().toJson(this)
}
我只想要一个具有魔力的函数,我也不想使用泛型,因为它对所有对象都可用。这是通用函数示例:
fun <T> T.convertToJson() : String {
return Gson().toJson(this)
}
我想要与仅适用于数据类类型的通用函数等效的东西。
解决方案
该语言没有在所有数据类上定义扩展函数的特性。如果您可以修改数据类以实现接口,那么您可以为此使用标记接口
/* define a marker interface and have all your data classes implement it */
interface Jsonable
data class Person(val name: String, val age: Int): Jsonable
data class Car(val color: Color, val brand: String): Jsonable
interface
现在您可以在as上定义扩展函数
fun Jsonable.convertToJson(): String = Gson().toJson(this)
你可以用它作为
Person("A", 50).convertToJson()
推荐阅读
- php - Concrete5 MySQL 查询问题
- vue.js - 有没有办法传递 v-chip-group v-model id 而不是项目索引?
- machine-learning - 使用文本和数字列构建机器学习模型
- node.js - 如何在我的计算机不开机的情况下“永远”托管我的 NodeJS 应用程序?
- fetch - 我想通过 fetch 函数获取数据
- c# - 如何解决 C# 中的“无法为空内容创建 CMS 签名”错误?
- c++ - 在我自己的开源项目中使用修改后的 C++ 仅标头库的常用方法是什么?
- html - 文本与 JSPDF 2.0.0 重叠并自定义字体
- flutter - 颤动中的 Twitch 视频
- android - 如何在本机反应中将服务器初始化为客户端一次?