我正在开发一个简单的应用程序(待办事项列表应用程序)。我创建了一个名为tasks
的类:
class tasks(var title:String, var time:String)
并将一些tasks
存储在ArrayList
:
fun main(args: Array<String>){
var tasks_list = ArrayList<tasks>(tasks("hello","3am"),tasks("meet amy","5pm"))
}
但它仍然给我一个错误:
你能解释一下为什么它不起作用吗?以及如何打印task
。感谢。
答案 0 :(得分:1)
您似乎没有正确初始化ArrayList
。
您可以执行以下操作:
fun main(args: Array<String>) {
var tasks_list = arrayListOf<tasks>(tasks("hello","3am"), tasks("meet amy","5pm"))
println(tasks_list)
}
相反。或者,这也可以:
var tasks_list = arrayListOf<tasks>()
tasks_list.add(tasks("hello","3am"))
tasks_list.add(tasks("meet amy","5pm"))
println("Tasks list:")
println(tasks_list)
但是,如果不覆盖toString()
,则只会打印某种类似于以下内容的对象引用:
Tasks list:
[tasks@28a418fc, tasks@5305068a]
在tasks
课程中,您应该覆盖toString()
,以便打印出有用的内容,如下所示:
class tasks(var title:String, var time:String) {
override fun toString() : String = "{Title: $title. Time: $time}"
}
现在您的输出将如下所示:
Tasks list:
[{Title: hello. Time: 3am}, {Title: meet amy. Time: 5pm}]
编辑:
关于您的评论,如果您希望单独打印该类的属性,您可以简单地使用此类的getter。这些是自动生成的,在这种情况下具有public
访问权限。
因此,您可以按如下方式迭代列表中的所有tasks
:
for(task in tasks_list) {
println(task.title)
println(task.time)
}
哪个会打印出来:
hello
3am
meet amy
5pm
或者:
for(i in 0..tasks_list.size-1) {
println("Task #: $i")
println(tasks_list.get(i).title)
println(tasks_list.get(i).time)
}
(注意-1
,因为范围运算符包含)会打印出来:
Task #: 0
hello
3am
Task #: 1
meet amy
5pm
我强烈建议您在继续之前阅读一些基本文档(例如this),因为这些是您在尝试做其他事情之前应该学习的非常基本的事情。