数据类似乎是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) 我有这样的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
我有以下数据类
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) 我试图让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问题.
在此先感谢您的帮助!
我创建了一个数据类
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和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.
现在我想知道如何解决这个问题.
我正在尝试将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使用任何其他关键字?什么"!" 签名意味着什么?
在我的项目中,我将AutoValue用于我的旧模型类.我开始使用Kotlin,我想使用数据类而不是AutoValue.我想为我的数据层中的所有数据类禁用模糊处理,但要对包中的其他类进行模糊处理.
有没有办法做到这一点?
我期望在我的Proguard文件中有这样的东西:
-keepclassmembers data class example.data_layer.** { *; }
Run Code Online (Sandbox Code Playgroud) 有人可以解释copy
Kotlin数据类的方法究竟是如何工作的吗?对于某些成员来说,实际上并没有创建(深层)副本,并且引用仍然是原始的.
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 = …
我在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显示错误:只允许在类文字的左侧使用类
怎么解决这个?提前致谢.