标签: data-class

有没有办法要求泛型类型成为Kotlin中的数据类?

以下不起作用,但希望能帮助您理解我的意思:

class Example<T : DataClass>
Run Code Online (Sandbox Code Playgroud)

如果你想知道我想要完成什么,这就是我想到的一个例子:

class Repository<T> where T : Entity, // Entity defines mutable property 'id'
                          T : DataClass {

  // assume there is a map here

  fun add(obj: T) {
    val copy = obj.copy(id = generateID())
    map.put(copy.id, copy)
  }

}
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法来完成我想要做的事情吗?

generics kotlin data-class

8
推荐指数
2
解决办法
2828
查看次数

如何使用Gson反序列化继承的Kotlin数据类

在Android应用程序中,我需要使用单个抽象级别对Kotlin数据类的Json数据进行反序列化.但我不知道在构造函数中放置正确的属性.

作为一个简单的版本,让我说我有一个形状:

abstract class Shape(open val x: Int, open val y: Int)
Run Code Online (Sandbox Code Playgroud)

有两个推导

data class Circle(val radius: Int, override val x: Int, override val y: Int): Shape(x, y)
Run Code Online (Sandbox Code Playgroud)

data class Square(val width: Int, override val x: Int, override val y: Int): Shape(x, y)
Run Code Online (Sandbox Code Playgroud)

所以我的目标是,不要实例化一个Shape.因此,请始终反序列化其派生.后来我需要在其他类中处理一些集合属性,例如:

val shapes: List<Shape>
Run Code Online (Sandbox Code Playgroud)

但我还必须知道每个元素的派生类型.

当我尝试用Gson反序列化给定的例子时

val square = gson.fromJson(SQUARE_JSON, Square::class.java)
Run Code Online (Sandbox Code Playgroud)

我总是得到一个IllegalArgumentException

java.lang.IllegalArgumentException: class com.example.shapes.model.Square declares multiple JSON fields named x

at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:170)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.Gson.fromJson(Gson.java:886)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.google.gson.Gson.fromJson(Gson.java:773)
Run Code Online (Sandbox Code Playgroud)

是否有可能在不编写自定义Gson …

inheritance json gson kotlin data-class

8
推荐指数
2
解决办法
3974
查看次数

Kotlin数据类和可空类型

我是Kotlin的新手,我不知道为什么编译器会抱怨这段代码:

data class Test(var data : String = "data")

fun test(){
  var test: Test? = Test("")
  var size = test?.data.length
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨test?.data.length,它说我应该这样做:test?.data?.length.但数据变量String不是String?,所以我不明白为什么我要把它放在?我想检查长度的时候.

android kotlin data-class

7
推荐指数
1
解决办法
2320
查看次数

Kotlin 中数据类中的参数可以是 var 吗?

我是 Kotlin 的初学者,我看过一些关于数据类的示例代码,似乎参数都是 val 类型,就像代码 A

我需要改变数据类MSetting的一些值,所以我设计了Code B,你能告诉我Code B是不是好方法?

代码 A

data class MSetting (
        val _id: Long, 
        val name: String,
        val createdDate: Long,
        val description: String
)
Run Code Online (Sandbox Code Playgroud)

代码 B

data class MSetting (
        var _id: Long, 
        var name: String,
        var createdDate: Long,
        var description: String
)
Run Code Online (Sandbox Code Playgroud)

android kotlin data-class

7
推荐指数
2
解决办法
2706
查看次数

如何忽略带有 Room 的实体字段

我有一个数据类,我Entity从它为我的数据库创建了一个。

这是我的数据类:

@Entity
@Parcelize
data class Tapligh(

    @PrimaryKey(autoGenerate = true)
    var id: Long,

    @SerializedName("title") var title: String?,
    @SerializedName("type") var type: Int?,
    @SerializedName("os") var os: Int?,
    @SerializedName("logo") var logo: String?,
    @SerializedName("template") var template: String?,
    @SerializedName("action") var action: String?,
    @SerializedName("date") var date: String?,
    @Embedded
    @SerializedName("videos") var videos: Videos?,

) : Parcelable {

    fun getTaplighType(): Int {

        return when (this.type) {

            0 -> TaplighType.IMAGE.type
            1 -> TaplighType.VIDEO.type
            else -> TaplighType.NATIVE.type
        }
    }
}

@Parcelize
data class Videos(

    @SerializedName("land") var land: String?, …
Run Code Online (Sandbox Code Playgroud)

android kotlin data-class android-room

7
推荐指数
2
解决办法
2529
查看次数

使用 MapStruct 具有默认值的 Kotlin 数据类

我有一个带有默认值的 kotlin 数据类,当我尝试使用 MapStruct 映射它时,它会在运行时抛出错误,因为它会尝试将 null 值分配给具有默认值的属性的不可空类型。我知道在 @Mapping 注释中分配默认值,但是 MapStruct 有没有办法考虑数据类默认值,而不是我必须这样做两次?

这是例子:

data class A(val property1: String = "prop 1", val property2: String)
data class B(val property2: String)

@Mapper
interface SomeMapper {
...
     fun mapBtoA(b: B): A
}

val b = B("prop 2 val")
val a: A = SomeMapper.INSTANCE.mapBtoA(b)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,它将尝试将 null 分配给 property1 而不是 prop 1 默认值。

kotlin mapstruct data-class

7
推荐指数
1
解决办法
1584
查看次数

在Kotlin数据类中调用超类构造函数之前的访问函数

我在Kotlin中使用数据类来显着减少我不得不写的Java代码量.

但是,在我的一个Java类中,我不知道如何在Kotlin中实现相同的结果.

我的Java类看起来有点像这样:

public class DataObject {

    private int mId;
    private String mName;

    public DataObject(int id, String name) {
        mId = id;
        mName = name;
    }

    public DataObject(Context context, int id) {
        mId = id;
        Cursor cursor = ...
        cursor.moveToFirst();
        mName = cursor.getString(...);
        cursor.close();
    }

    public int getId() {
        return mId;
    }

    public String getName() {
        return mName;
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图在Kotlin中重写它,到目前为止我有这个:

data class DataObject(val id: Int, val name: String) {

    constructor(context: Context, id: Int) : this(id, fetchName(context))

    private fun fetchName(context: …
Run Code Online (Sandbox Code Playgroud)

java kotlin data-class

6
推荐指数
1
解决办法
2551
查看次数

如何让数据类在Kotlin中实现Interface/extends Superclass属性?

我有几个数据类,其中包括一个var id: Int?字段.我想在接口超类中表达它,并且有数据类扩展它并id在构造时设置它.但是,如果我试试这个:

interface B {
  var id: Int?
}

data class A(var id: Int) : B(id)
Run Code Online (Sandbox Code Playgroud)

它抱怨我压倒了这个id领域,我是哈哈.

:A在这种情况下,我如何让数据类在id构造时使用它,并设置id接口超类中声明的数据

inheritance properties kotlin data-class

6
推荐指数
1
解决办法
1687
查看次数

通过辅助构造函数初始化Kotlin Data Class上的val属性

class Animal {
    val name: String

    constructor(name: String){
        this.name = name // initialized via constructor
    }
}
Run Code Online (Sandbox Code Playgroud)

对于上面的类,Kotlin我能够通过辅助构造函数初始化val属性,但Data类不允许这样做

data class User(val name: String, val postalCode: Int) {
    val email: String

    constructor( email: String): this("", 1){
        this.email = email // error: value can not be reassigned
    }

}
Run Code Online (Sandbox Code Playgroud)

我无法理解的是,电子邮件属性已经初始化,因为我还没有声明任何初始化?

kotlin data-class

6
推荐指数
1
解决办法
1547
查看次数

如何从 kotlin 类生成 json 模式

有没有办法从 Kotlin 类/数据类自动生成 JSON 模式或 Protobuf 模式?我有一个 android 项目,我希望能够在 TypeScript 和 Swift 中使用我的数据模型类,而无需再次编写它们。由于存在从 JSON 模式到几乎所有编程语言的转换器,我想将 Kotlin 类转换为 JSON 模式就可以了。

schema json model kotlin data-class

6
推荐指数
0
解决办法
4281
查看次数