标签: data-class

扩展Kotlin中的数据类

数据类似乎是Java中旧式POJO的替代品.很可能这些类允许继承,但我看不到扩展数据类的方便方法.我需要的是这样的:

open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Run Code Online (Sandbox Code Playgroud)

由于component1()方法的冲突,上面的代码失败了.data仅在一个类中留下注释也不起作用.

也许还有另一个成语来扩展数据类?

UPD:我可能只注释子子类,但data注释只处理构造函数中声明的属性.也就是说,我必须声明所有父级的属性open并覆盖它们,这很难看:

open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
    override var id: Long = 0,
    override var location: String = "",
    var isbn: String
) : Resource()
Run Code Online (Sandbox Code Playgroud)

inheritance android abstract kotlin data-class

141
推荐指数
7
解决办法
5万
查看次数

使用GSON的Json的Kotlin数据类

我有这样的Java POJO类:

class Topic {
    @SerializedName("id")
    long id;
    @SerializedName("name")
    String name;
}
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的Kotlin数据类

 data class Topic(val id: Long, val name: String)
Run Code Online (Sandbox Code Playgroud)

如何在java变量中提供类似注释的json key任何变量?kotlin data class@SerializedName

java json gson kotlin data-class

85
推荐指数
2
解决办法
6万
查看次数

等于kotlin中数据类的方法

我有以下数据类

data class PuzzleBoard(val board: IntArray) {
    val dimension by lazy { Math.sqrt(board.size.toDouble()).toInt() }
}
Run Code Online (Sandbox Code Playgroud)

我读到Kotlin中的数据类可以免费获得equals()/ hashcode()方法.

我实例化了两个对象.

val board1 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))
val board2 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))
Run Code Online (Sandbox Code Playgroud)

但是仍然以下语句返回false.

board1 == board2
board1.equals(board2)
Run Code Online (Sandbox Code Playgroud)

arrays equals kotlin data-class

44
推荐指数
4
解决办法
2万
查看次数

kotlin数据类+ bean验证jsr 303

我试图让Kotlin在spring-data-rest项目上使用jsr 303验证.

给出以下数据类声明:

@Entity data class User(
    @Id 
    @GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
    var id: Long? = null,

    @Size(min=5, max=15)
    val name: String
)
Run Code Online (Sandbox Code Playgroud)

@Size注释在这里没有任何效果,使我能够保存名称为1个字符的用户.
它在执行相同的示例时效果很好,但在Java类而不是Kotlin中.

这让我想起了Kotlin问题.

在此先感谢您的帮助!

jpa bean-validation kotlin spring-data-rest data-class

36
推荐指数
2
解决办法
1万
查看次数

如何使用toString扩展数据类

我创建了一个数据类

data class Something (
    val a : String,
    val b : Object,
    val c : String
)
Run Code Online (Sandbox Code Playgroud)

在我的程序中稍后我需要这个数据类的字符串表示我试图扩展toString方法.

override fun Something.toString() : String = a + b.result() + c
Run Code Online (Sandbox Code Playgroud)

这里的问题是,它不允许扩展(覆盖)toString功能,因为它不适用于顶级功能.

如何正确覆盖/扩展自定义数据类的toString方法?

kotlin kotlin-extension data-class

35
推荐指数
1
解决办法
1万
查看次数

RealmObject的Kotlin数据类

我正在使用Kotlin和Realm编写数据类

data class AuthToken(val register: Boolean,
                     val token: String,
                     val tokenSecret: String,
                     val user: AuthUser)
Run Code Online (Sandbox Code Playgroud)

我必须将数据保存到db,所以我使用Realm来保存它.但是正如我们所知,如果我想将类保存到Realm,那么AuthToken该类必须扩展RealmObject.

这就是问题,Kotlin说数据类不能扩展类.所以我放弃数据类,只使用普通的Kotlin类作为模型,然后另一个问题来了:

Kotlin类没有吸气剂或固定剂.我们知道Realm类必须将所有属性设置为private并编写getter和setter.

现在我想知道如何解决这个问题.

android realm kotlin data-class

29
推荐指数
1
解决办法
8795
查看次数

Kotlin数据类实现Java接口

我正在尝试将Kotlin引入我当前的项目中.我决定从实体开始,这些实体似乎完美地映射到数据类.例如,我有一个数据类:

data class Video(val id: Long, val ownerId: Long, val title: String, val description: String? = null,
             val imgLink: String? = null, val created: Date? = null, val accessKey: String? = null,
             val views: Long? = null, val comments: Long? = null, val videoLink: String? = null): Entity
Run Code Online (Sandbox Code Playgroud)

其中实现了Java接口:

public interface Entity {
   Long getId();  
}
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,编译器不理解该方法已经实现:

类'Video'必须声明为abstract或实现抽象成员public abstract fun getId():kotlin.Long!在net.alfad.data.Entity中定义

我是否必须为id param使用任何其他关键字?什么"!" 签名意味着什么?

java overriding kotlin data-class

27
推荐指数
1
解决办法
8330
查看次数

Proguard - 不要混淆Kotlin数据类

在我的项目中,我将AutoValue用于我的旧模型类.我开始使用Kotlin,我想使用数据类而不是AutoValue.我想为我的数据层中的所有数据类禁用模糊处理,但要对包中的其他类进行模糊处理.

有没有办法做到这一点?

我期望在我的Proguard文件中有这样的东西:

-keepclassmembers data class example.data_layer.** { *; }
Run Code Online (Sandbox Code Playgroud)

android proguard kotlin data-class

18
推荐指数
1
解决办法
6846
查看次数

Kotlin数据类复制方法不能深度复制所有成员

有人可以解释copyKotlin数据类的方法究竟是如何工作的吗?对于某些成员来说,实际上并没有创建(深层)副本,并且引用仍然是原始的.

fun test() {
    val bar = Bar(0)
    val foo = Foo(5, bar, mutableListOf(1, 2, 3))
    println("foo    : $foo")

    val barCopy = bar.copy()
    val fooCopy = foo.copy()
    foo.a = 10
    bar.x = 2
    foo.list.add(4)

    println("foo    : $foo")
    println("fooCopy: $fooCopy")
    println("barCopy: $barCopy")
}

data class Foo(var a: Int,
               val bar: Bar,
               val list: MutableList<Int> = mutableListOf())

data class Bar(var x: Int = 0)
Run Code Online (Sandbox Code Playgroud)

输出:
foo:Foo(a = 5,bar = Bar(x = 0),list = [1,2,3])
foo:Foo(a = 10,bar = Bar(x = …

copy deep-copy kotlin data-class

16
推荐指数
4
解决办法
2万
查看次数

在类文字的左侧只允许使用类

我在StackOverflow中知道很多类似的问题,但没有解决我的问题.

我有一个通用数据类:

  data class ServiceCall<out T>(val result: T?, val exception: String?, val pagination: String?, val stringResult: String?)
Run Code Online (Sandbox Code Playgroud)

我想这样使用:

Gson().fromJson(json, ServiceCall<SurveyListModel>::class.java).result
Run Code Online (Sandbox Code Playgroud)

IDE显示错误:只允许在类文字的左侧使用类

怎么解决这个?提前致谢.

generics android gson kotlin data-class

15
推荐指数
1
解决办法
6186
查看次数