kotlin顶级scopint问题
Kotlin在顶级(即类外)的范围是公共的和静态的,对吗?kotlin顶级scopint问题,kotlin,scoping,Kotlin,Scoping,Kotlin在顶级(即类外)的范围是公共的和静态的,对吗? 我必须访问文件,其中一个有数据类,另一个试图访问它 文件1: package com.test data class Xyz (val s1:String, val s2:String) package com.test data class Xyz (val s1:String, val s2:String) val theList : List<Xyz> get() = buildList() fun
我必须访问文件,其中一个有数据类,另一个试图访问它 文件1:
package com.test
data class Xyz (val s1:String, val s2:String)
package com.test
data class Xyz (val s1:String, val s2:String)
val theList : List<Xyz>
get() = buildList()
fun buildList() : List<Xyz> {
var myList = mutableListOf<Xyz>()
if (theList.size > 0) return theList;
val l1 = arrayListOf<String>("1", "2", "3")
val l2 = arrayListOf<String>("a", "b", "c")
for (i in 0..l1.lastIndex)
myList.add(Xyz(l1[i], l2[i]))
return myList;
}
文件2:
package com.test
val myList : List<Xyz> = File1.theList
package com.test
val myList : List<Xyz> theList
文件在同一个目录中,并且有相同的包,所以我不必导入任何内容,对吗?此外,我还尝试导入“importfile1”和“importcom.test.File1”,但似乎没有任何效果
我已经尝试了我能想到的一切,但是第一个文件看不到第二个文件。我完全糊涂了
我正在使用Intellij的IDE。
注意:按照下面的建议更新了代码,编译器抱怨需要一个getter/setter,而该代码现在有:
文件1:
package com.test
data class Xyz (val s1:String, val s2:String)
package com.test
data class Xyz (val s1:String, val s2:String)
val theList : List<Xyz>
get() = buildList()
fun buildList() : List<Xyz> {
var myList = mutableListOf<Xyz>()
if (theList.size > 0) return theList;
val l1 = arrayListOf<String>("1", "2", "3")
val l2 = arrayListOf<String>("a", "b", "c")
for (i in 0..l1.lastIndex)
myList.add(Xyz(l1[i], l2[i]))
return myList;
}
所以--现在看不到getter()??这些文件在同一个包中,所以不需要导入它们。此外,您不需要指定文件名:
val myList : List<Xyz> = theList
val myList:List=t列表
(如果列表是文件1中的顶级属性)
通常,只有在从Java代码调用Kotlin顶级函数/属性时,.kt文件的名称才用于调用某些东西。我曾经尝试过这样做。现在这样做,它抱怨没有“预期的属性getter或setter”,所以我添加了一个(上面的代码),出于某种原因itt仍然抱怨。它抱怨是因为在
buildLIst
中使用theList
,它使用buildLIst
来计算自身。如果您编写一个像get()=buildLIst()这样的getter
,则每次尝试访问列表时都会调用buildList()
。如果要使用buildList()
的结果初始化列表
,并将结果保存到属性中,只需像这样声明属性:val theList:List=buildList()
(您仍然需要删除访问构建列表
函数中的列表
)。