Android 构造函数中的变量在Kotlin中应该是私有的或公共的

Android 构造函数中的变量在Kotlin中应该是私有的或公共的,android,kotlin,Android,Kotlin,我想了解构造函数中的变量在Kotlin中应该是私有的还是公共的。 访问类构造函数内部的修饰符有什么意义 在下面的代码段中,变量service和query是私有的。 保密有什么用? 这有什么帮助 class GithubPagingSource( private val service: GithubService, private val query: String ) : PagingSource<Int, Repo>() { overri

我想了解构造函数中的变量在Kotlin中应该是私有的还是公共的。
访问类构造函数内部的修饰符有什么意义

在下面的代码段中,变量servicequery是私有的。
保密有什么用?
这有什么帮助

class GithubPagingSource(
        private val service: GithubService,
        private val query: String
) : PagingSource<Int, Repo>() { 
    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
        TODO("Not yet implemented")
    }
}
类GithubPagingSource(
私人val服务:GithubService,
私有val查询:字符串
):PagingSource(){
覆盖挂起乐趣加载(参数:LoadParams):LoadResult{
TODO(“尚未实施”)
}
}

<强>注:我已经阅读了有关该区域的多个问题和答案,但没有找到任何有效的答案。

< P> >考虑的是,在<代码> KOTLIN < /C>中的构造函数的定义不同于java < /C>。在您提供的代码片段中,该类有一个主构造函数。根据报告:

主构造函数是类头的一部分:它位于类名(和可选类型参数)之后

例如:

class GithubPagingSource(
    service: GithubService,
    query: String
)
此外:

请注意,可以在初始值设定项块中使用主构造函数的参数。它们也可以在类主体中声明的属性初始值设定项中使用

那么,如果我们想在函数体中使用它们,我们应该怎么做呢

在这种情况下,我们必须通过向主构造函数的参数添加
var
val
来声明类属性:

class GithubPagingSource(
    val service: GithubService,
    val query: String
) : PagingSource<Int, Repo>() { 

    init {
        println("$query") // query is accessible here
    }

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
        println("$query") // query also is accessible here
    }
}
因此,如果我们有对此类实例的引用:

val githubPagingSource = ...
val query = githubPagingSource.query // is not accessible here

私有属性只能从类本身访问。
val githubPagingSource = ...
val query = githubPagingSource.query // is not accessible here