首页 > 解决方案 > 有没有办法只对数据类类型进行扩展功能?

问题描述

我的问题是我想要一个仅适用于数据类的扩展函数。

例如,假设我有多个数据类。

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)
}

我想要与仅适用于数据类类型的通用函数等效的东西。

标签: androidkotlin

解决方案


该语言没有在所有数据类上定义扩展函数的特性。如果您可以修改数据类以实现接口,那么您可以为此使用标记接口

/* 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()

推荐阅读