繁体   English   中英

使用@Parcelize 时如何对数据类中的构造函数以外的成员变量进行打包

How to parcelise member variable other than constructor in data class while using @Parcelize

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用 Room 和 Kotlin 数据类。 如,

@Entity(tableName = "Person")
@Parcelize
class Test(@ColumnInfo(name = "name") var name:String) : Parcelable{
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "ID")
    var id: Long? = null
}

我可以使用构造函数创建实例并插入数据。 我还收到一条警告"property would not be serialized into a 'parcel'" 当我试图通过一个包发送对象时,id 丢失了,正如警告所说的那样。 如何在包裹中添加该会员ID 我没有在构造函数中保留 ID,因为我希望它们自动生成。

1 个回复

您可以在文档中找到此信息:

@Parcelize要求在主构造函数中声明所有序列化属性。 Android 扩展将在每个属性上发出警告,并在类主体中声明一个支持字段。 此外,如果某些主要构造函数参数不是属性,则无法应用@Parcelize

如果你的类需要更高级的序列化逻辑,你可以将它写在一个伴生类中:

@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
    private companion object : Parceler<User> {
        override fun User.write(parcel: Parcel, flags: Int) {
            // Custom write implementation
        }

        override fun create(parcel: Parcel): User {
            // Custom read implementation
        }
    }
}

感谢@tynn提供参考。 如果有人找不到解决方法,我还会发表另一篇文章。

@Entity(tableName = "Person")
@Parcelize
data class Test(@ColumnInfo(name = "name") var name:String,
           @PrimaryKey(autoGenerate = true)
           @ColumnInfo(name = "ID")
           var id: Long? = null) : Parcelable

而且,您仍然可以创建没有ID的对象,例如Test("test name") ,当将对象保存在ROOM中时,它将插入一个增量值。

2 @Parcelize 和 Superclass,由于构造函数要求而加倍数据

我有一个 Result 可打包类,它应该用作密钥和可打包数据的容器。 我是这样定义的: 问题是,在定义子类时,为了让@Parcelize 工作,我需要在构造函数中将val添加到对象中,实质上是使数据被两次写入包裹两次。 下面是一个例子: 我想要这个: 但这是不允许的。 有什么聪明的方法可 ...

3 在构造函数以外的其他函数中设置类变量

这个问题已经在这里有了答案: 不同的句柄和值类 2个答案 为什么属性不采用类方法的新值? 2个答案 为什么这个MATLAB类没有保留其属性? 1个答案 这可能是一个非常基本的问题,但是我没有在互联网上找到任何东西。 我正在编写一个matla ...

5 推广构造函数以在C#中对数组进行操作

我想知道如何在数组的每个元素上应用构造函数,然后返回构造对象的数组。 具体来说,我正在使用C#的TreeNode 。 我想要的概念如下: TreeNode[](animals)的累积效应 我知道我可以我们foreach和手动加载这样的结构,但如果可能的话,我在寻找优雅的“一条 ...

2012-04-26 06:11:21 3 151   c#/ arrays
8 在构造函数中初始化类成员变量

我最近开始研究 C++,我在通过初始化列表初始化成员变量时观察到一种奇怪的行为。 在上面的代码片段中,当我运行正在打印的程序Demo()时,我为类 Demo( d_ ) 创建了一个对象。 但是,如果我取消注释注释代码( d_(123) ),我将得到Demo(int x)作为输出。 第一个场景对 ...

2021-07-02 03:44:37 2 59   c++
9 Kotlin:为什么@Parcelize要求在主构造函数中声明所有序列化的属性?

在许多情况下,我不需要从主构造函数中传入一个字段,例如,在初始化后已分配了一个字段,并已采取了一些步骤。 字段直接访问全局变量(例如静态变量,例如其他持久数据)。 现在,我有一个折衷的解决方案是在主构造函数中使用var和default value ,或者覆盖companion objec ...

10 在类构造函数中动态分配的数据成员

我在尝试弄清楚如何将类(最初是int)中的数据成员转换为指向动态分配的内存的指针时遇到问题。 我知道我可以在正常情况下进行int * num = new int的操作,但是如何在类中进行初始化? 我的老师做了出色的工作,没有在课堂上以最糟糕的方式解释这件事。 这是类和构造函数的 ...

2014-11-10 04:08:20 1 794   c++
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM