【发布时间】:2018-06-04 01:55:21
【问题描述】:
在我看来,私有函数只能在类内部访问,但在我的示例中,可以访问伴随对象外部的以下代码 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 看来,“private 意味着仅在此类内部可见(包括其所有成员);” 用于类和接口。
请看图片好吗?
致:
谢谢!我无法通过以下代码访问 MyB 类外部伴随对象中的私有成员。
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
}
【问题讨论】: