我正在尝试实现类似以下C的类似数据类定义:
struct A {
int b;
struct {
int d;
} c;
};
Run Code Online (Sandbox Code Playgroud)
According to Dmitry Jemerov it is possible, but he didn't provide any code sample. https://discuss.kotlinlang.org/t/is-there-a-reason-for-not-allowing-inner-data-classes/2526/5
You can simply make it nested inside another class. Nested classes can be data classes.
How it should be done if it is true?
我最近在kotlinc,命令行环境中尝试了以下代码.
var greet = Pair("Hello", "World")
val (word1, word2) = greet
Run Code Online (Sandbox Code Playgroud)
输出word1和word2在控制台输出以下消息
>>> word1
error: unresolved reference: word1
word1
^
Run Code Online (Sandbox Code Playgroud)
我不确定是否从最新版本的kotlin中删除了解构.目前,在mac上使用编译器1.0.2版本kotlinc.
我有一个数据类,我需要初始化一些List<String>.我需要获取JsonArray的值(我正在使用Gson).
我做了这个功能:
private fun arrayToList(data: JsonArray, key: String): List<String> {
val list = mutableListOf<String>()
data.forEach { a ->
list.add(a[key].asString)
}
return list
}
Run Code Online (Sandbox Code Playgroud)
我如何转换为lambda表达式?
谢谢.
我正在尝试使用多个构造函数实现不可变数据类.我觉得这样的事情应该是可能的:
data class Color(val r: Int, val g: Int, val b: Int) {
constructor(hex: String) {
assert(Regex("#[a-fA-F0-6]{6}").matches(hex), { "$hex is not a hex color" } )
val r = hex.substring(1..2).toInt(16)
val g = hex.substring(3..4).toInt(16)
val b = hex.substring(5..6).toInt(16)
this(r,g,b)
}
}
Run Code Online (Sandbox Code Playgroud)
当然,它不是:Kotlin期望对主构造函数的调用在顶部声明:
constructor(hex: String): this(r,g,b) {
assert(Regex("#[a-fA-F0-6]{6}").matches(hex), { "$hex is not a hex color" } )
val r = hex.substring(1..2).toInt(16)
val g = hex.substring(3..4).toInt(16)
val b = hex.substring(5..6).toInt(16)
}
Run Code Online (Sandbox Code Playgroud)
这也没有用,因为调用是在构造函数体之前执行的,并且无法访问局部变量.
我可以做这个,当然是:
constructor(hex: …Run Code Online (Sandbox Code Playgroud) 而已.是否可以通过Kotlin中的反射调用数据类的copy()函数?我怎样才能引用函数本身?是否有所有数据类的超类?(我找不到......)
我有机票舱位:
data class Ticket(
var contact_email : String? = null,
var date_opened : LocalDateTime? = null
)
Run Code Online (Sandbox Code Playgroud)
但是从字符串读取时出现错误:
引起原因:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
java.time.LocalDateTime(没有创建者,如默认构造一样,存在):没有从字符串值反序列化的字符串参数构造函数/工厂方法('2017-11-13T06 :40:00Z'),网址为[来源:UNKNOWN; 行:-1,列:-1](通过参考链:rnd_classifier.model.Ticket [“ date_opened”])
我尝试添加注释没有成功:
data class Ticket(
var contact_email : String? = null,
@JsonSerialize(using = ToStringSerializer::class)
@JsonDeserialize(using = LocalDateTimeDeserializer::class)
var date_opened : LocalDateTime? = null
)
Run Code Online (Sandbox Code Playgroud)
如何解决?
我有一个包含大约 37 个属性/参数的 Kotlin 数据类。我想将所有这些参数的值放入列表中。我怎样才能以干净、最小化和高效的方式做到这一点?我尝试过搜索,但还没有遇到任何类似的情况。
任何帮助,将不胜感激。谢谢。
编辑
每个属性/参数都是一个字符串。我在 Android 中将每个字符串加载到其自己的 TextView 中(是的,TableLayout 中的 37 个 TextView 每个都有自己的标签。类似于收据的样子)。但我不想这样做 ( textView.text = myClass.parameter) 37 次。
kotlin 中是否有任何方法可以对数据类值进行约束。我正在寻找类似于以下 java.lang.String 的内容。它不需要是非法参数异常,并且约束不一定在字符串字段上。
public class TotallyMadeUpClass{
private String username
public String getUsername(){ return this.username }
//Constrain the value somehow.
public void setUsername(String username) {
if (username.length > 10)
throw new IllegalArgumentException()
this.username = username}
}
Run Code Online (Sandbox Code Playgroud)
或者这个例子更接近我想要实现的目标。
public class TotallyMadeUpClass{
private final String username;
TotallyMadeUpClass(String username, OtherParams others){
if (username.length > 10)
throw new IllegalArgumentException()
this.username = username
}
public String getUsername(){ return this.username }
}
Run Code Online (Sandbox Code Playgroud) 我在 Java 中有 2 个模型类,其中一个扩展了另一个
@UseStag
public class GenericMessages extends NavigationLocalizationMap implements Serializable {
@SerializedName("loginCtaText")
@Expose
String loginCtaText;
@SerializedName("forgotPasswordCtaText")
@Expose
String forgotPasswordCtaText;
public String getLoginCtaText() {
return loginCtaText;
}
public String getForgotPasswordCtaText() {
return forgotPasswordCtaText;
}
}
Run Code Online (Sandbox Code Playgroud)
NavigationLocalizationMap 类
public class NavigationLocalizationMap implements Serializable {
@SerializedName("localizationMap")
@Expose
public HashMap<String, LocalizationResult> localizationMap;
@SerializedName("geoTargetedPageIds")
@Expose
public HashMap<String, String> geoTargetedPageIdsMap;
@SerializedName("pageId")
@Expose
public String pageId;
public HashMap<String, LocalizationResult> getLocalizationMap() {
return localizationMap;
}
public void setLocalizationMap(HashMap<String, LocalizationResult> localizationMap) {
this.localizationMap = localizationMap;
} …Run Code Online (Sandbox Code Playgroud) 给定一个具有可为空字段的数据类,为什么我不能通过仅传递不可为空字段来构造它?
我已经看过这个相关问题了。是什么阻止 Kotlin 隐式将 null 分配给可为 null 的字段?
data class Blah(val id: Int, val name: String?)
val x = Blah(id = 2) // Complains I didn't pass a name ???
Run Code Online (Sandbox Code Playgroud) data-class ×10
kotlin ×10
android ×1
constructor ×1
copy ×1
immutability ×1
inheritance ×1
jackson ×1
java ×1
lambda ×1
list ×1
localdate ×1
reflection ×1
validation ×1