Class 无法打印模型实例的值
我知道这是一个非常基本的问题,但对这个问题的回答将解决我的许多疑问Class 无法打印模型实例的值,class,object,constructor,kotlin,Class,Object,Constructor,Kotlin,我知道这是一个非常基本的问题,但对这个问题的回答将解决我的许多疑问 val new_parent = ParentDetails(intent.extras.getString("name"), intent.extras.getString("email"), intent.extras.getString("parent_relation"), intent.extras.getString("locationdata")) println(new_parent.
val new_parent = ParentDetails(intent.extras.getString("name"),
intent.extras.getString("email"),
intent.extras.getString("parent_relation"),
intent.extras.getString("locationdata"))
println(new_parent.tostring())
上面的代码不会打印类中存在的各种字段及其值
ParentDetails
是我用一些初始化的字段创建的模型。ParentDetails
模型:
class ParentDetails {
var parent_id: Int = 0
var parent_name: String = ""
var parent_email: String = ""
var parent_relation: String = ""
var parent_location: String=""
constructor(parent_name: String, parent_email: String, parent_relation: String,parent_location:String) {
this.parent_name = parent_name
this.parent_email = parent_email
this.parent_relation = parent_relation
this.parent_location = parent_location
}
public fun getparentId(): Int {
return parent_id
}
fun ParentDetailsprintme() {
println(parent_name)
println(parent_email)
println(parent_relation)
println(parent_location)
}
}
事实上,它打印null并访问单个字段,它打印空字符串(初始化的方式)
我们如何解释这一点?您是否检查了您是否从您的
意图中收到了有效的数据。额外的
此外,我建议您为您的模型使用数据类
。
它看起来像这样:
data class ParentDetails(
var parent_id: Int = 0,
var parent_name: String = "",
var parent_email: String = "",
var parent_relation: String = "",
var parent_location: String = ""
)
您可以这样使用它:
val new_parent = ParentDetails(
parent_name = intent.extras.getString("name"),
parent_email = intent.extras.getString("email"),
parent_relation = intent.extras.getString("parent_relation"),
parent_location = intent.extras.getString("locationdata")
)
println(new_parent.tostring())
您是否检查是否从您的intent.extras
接收到有效数据
此外,我建议您为您的模型使用数据类
。
它看起来像这样:
data class ParentDetails(
var parent_id: Int = 0,
var parent_name: String = "",
var parent_email: String = "",
var parent_relation: String = "",
var parent_location: String = ""
)
您可以这样使用它:
val new_parent = ParentDetails(
parent_name = intent.extras.getString("name"),
parent_email = intent.extras.getString("email"),
parent_relation = intent.extras.getString("parent_relation"),
parent_location = intent.extras.getString("locationdata")
)
println(new_parent.tostring())
据我所知,您的问题是调用println(new\u parent.tostring())
无法打印您希望在函数parentDetailsSprintMe
中打印的内容
首先,您有一个输入错误,正确的调用应该是new\u parent.toString()
请注意,它可以简化为println(新的\u父项)
它不会打印您在ParentDetailsprintme
方法中定义的内容,因为该方法未被调用
println(new_parent.toString())
prints实际上是对象的hashcode,因为这是每个对象的默认行为
要使其正常工作,请像调用println(new\u parent.ParentDetailsprintme())
一样调用它,或重写toString()
方法,例如:
override fun toString() = "$parent_name $parent_email $parent_relation $parent_location"
接下来
val new_parent = ParentDetails("myName", "myEmail", "myParent_relation", "myLocationdata")
println(new_parent)
应该打印
myName myEmail myParent_relation myLocationdata
Kotlin的函数只是在引擎盖下调用System.out.println(message)
,它将调用String.valueOf()
(例如,对于对象,它将调用传递对象的toString()
方法)
更新(“使用数据类方法也有效”):
如果将该类设置为数据类:
data class ParentDetails(
val parent_id: Int = 0,
val parent_name: String = "",
val parent_email: String = "",
val parent_relation: String = "",
val parent_location: String = ""
)
然后你执行
val new_parent = ParentDetails(0, "myName", "myEmail", "myParent_relation", "myLocationdata")
println(new_parent)
您将因此收到
ParentDetails(parent_id=0, parent_name=myName, parent_email=myEmail, parent_relation=myParent_relation, parent_location=myLocationdata)
这是因为重写toString()
函数:
编译器自动从所有
在主构造函数中声明的属性:
- 等于()/hashCode()对李>
- “User(name=John,age=42)”形式的toString()强>
据我所知,您的问题是调用println(new\u parent.tostring())
无法打印您希望在函数parentDetailsSprintMe
中打印的内容
首先,您有一个输入错误,正确的调用应该是new\u parent.toString()
请注意,它可以简化为println(新的\u父项)
它不会打印您在ParentDetailsprintme
方法中定义的内容,因为该方法未被调用
println(new_parent.toString())
prints实际上是对象的hashcode,因为这是每个对象的默认行为
要使其正常工作,请像调用println(new\u parent.ParentDetailsprintme())
一样调用它,或重写toString()
方法,例如:
override fun toString() = "$parent_name $parent_email $parent_relation $parent_location"
接下来
val new_parent = ParentDetails("myName", "myEmail", "myParent_relation", "myLocationdata")
println(new_parent)
应该打印
myName myEmail myParent_relation myLocationdata
Kotlin的函数只是在引擎盖下调用
System.out.println(message)
,它将调用String.valueOf()
(例如,对于对象,它将调用传递对象的toString()
方法)
更新(“使用数据类方法也有效”): 如果将该类设置为数据类:
data class ParentDetails(
val parent_id: Int = 0,
val parent_name: String = "",
val parent_email: String = "",
val parent_relation: String = "",
val parent_location: String = ""
)
然后你执行
val new_parent = ParentDetails(0, "myName", "myEmail", "myParent_relation", "myLocationdata")
println(new_parent)
您将因此收到
ParentDetails(parent_id=0, parent_name=myName, parent_email=myEmail, parent_relation=myParent_relation, parent_location=myLocationdata)
这是因为重写toString()
函数:
编译器自动从所有
在主构造函数中声明的属性:
- 等于()/hashCode()对李>
- “User(name=John,age=42)”形式的toString()强>
如前所述,您有一个打字错误
toString
返回对象的hashcode,除非它被重写以返回其他内容。有关更多详细信息,请查阅原始实现
通过重写toString
方法,可以更改它返回的内容,并通过该方法更改print(someClass)
时打印的内容。德瓦加在他们的回答中表明了这一点
自动生成包含类内容的toString
方法。因此,创建数据类是获取包含数据的输出的快捷方式
你使用的方法不起作用的原因是你没有调用它。如果您调用它而不是toString
,您将得到打印的数据
此外,打印类时,会显式调用toString
。您不需要调用print(someInstance.toString())
,print(someInstance)
就足够了
在我写答案时,您不需要在Kotlin中使用辅助构造函数。无论是否是数据类,主构造函数都会显著缩短代码。此外,您还应该研究命名约定。如前所述,您有一个输入错误
toString
返回对象的hashcode,除非它被重写以返回其他内容。有关更多详细信息,请查阅原始实现
通过重写toString
方法,可以更改它返回的内容,并通过该方法更改print(someClass)
时打印的内容。德瓦加在他们的回答中表明了这一点
自动生成包含类内容的toString
方法。因此,创建数据类是获取包含数据的输出的快捷方式
你使用的方法不起作用的原因是你没有调用它。如果你是c