Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin顶级scopint问题_Kotlin_Scoping - Fatal编程技术网

kotlin顶级scopint问题

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

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 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()
(您仍然需要删除访问
构建列表
函数中的
列表
)。