gpt4 book ai didi

android - 为什么我可以在 Kotlin 的伴生对象之外访问私有(private)乐趣?

转载 作者:行者123 更新时间:2023-11-29 15:35:47 27 4
gpt4 key购买 nike

在我看来,私有(private)函数只能在类内部访问,但在我的示例中,以下代码 bindPreferenceSummaryToValue(findPreference("RestoreItem")) 位于伴随对象之外,是无障碍。为什么?

代码

class UIPreference : AppCompatPreferenceActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_preference)

fragmentManager.beginTransaction().replace(R.id.content, MyPreferenceFragment()).commit()

setControl()
utility.setAD(adView)
}


class MyPreferenceFragment : PreferenceFragment() {

private lateinit var mContext: Context

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addPreferencesFromResource(R.xml.mypreference)
mContext=this.activity
setPreference()

bindPreferenceSummaryToValue(findPreference("RestoreItem"))
}
}


companion object {
private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener { preference, value ->
val stringValue = value.toString()
if (preference is ListPreference) {
val listPreference = preference
val index = listPreference.findIndexOfValue(stringValue)

preference.setSummary(
if (index >= 0)
listPreference.entries[index]
else
preference.summary)

}
true
}

private fun bindPreferenceSummaryToValue(preference: Preference) {
preference.onPreferenceChangeListener = sBindPreferenceSummaryToValueListener

sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.context)
.getString(preference.key, ""))
}
}


}

致大卫·罗森

谢谢!但是来自https://kotlinlang.org/docs/reference/visibility-modifiers.html ,对于类和接口(interface),“private 意味着仅在此类内部可见(包括其所有成员)”;

你能看一下图片吗?

enter image description here

你好:

谢谢!我无法通过以下代码访问伴随对象之外的类 MyB 中的私有(private)成员。

class UIPreference {

companion object {
private val aa=1

}

class MyA {
private val bar: Int =UIPreference.aa //OK
}

}


class MyB {
private val bar: Int = UIPreference.aa //Failed
}

最佳答案

在 Kotlin 中,伴随对象可以有效地替代 Java 的静态成员,并且它们的可见性规则以相同的方式工作。就像在 Java 中您可以从类的实例方法调用私有(private)静态方法一样,在 Kotlin 中您可以从类的常规方法调用伴随对象的私有(private)方法。

关于android - 为什么我可以在 Kotlin 的伴生对象之外访问私有(private)乐趣?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50672572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com