在我看来,私有函数只能在类中访问,但在我的示例中,可以访问以下代码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, ""))
}
}
}
致David Rawson
谢谢!但是从https://kotlinlang.org/docs/reference/visibility-modifiers.html开始,似乎"私有意味着只在这个类中可见(包括其所有成员);" 用于类和接口。
你能看到图片吗?
致:
谢谢!我无法通过以下代码访问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
}
答案 0 :(得分:3)
在Kotlin中,伴随对象可以有效地替代Java的静态成员,并且它们的可见性规则以相同的方式工作。就像在Java中一样,您可以从类的实例方法调用私有静态方法,在Kotlin中,您可以从类的常规方法中调用伴随对象的私有方法。
答案 1 :(得分:1)
您的私人密码仍在= ?)"
范围内,因此在此课程中可见(仅限!)。但是,该代码无法在外部 /**
* Display the specified resource.
*
* @param \App\Event $event
* @return \Illuminate\Http\Response
*/
public function show($id)
{
// The current event
$event = Event::find($id);
// Find related, upcoming events
$tags = $event->tags;
$relatedEvents = Event::where('startDate', '>=', Carbon::now())
->where(function ($query) use ($event) {
$query->where('hostedBy', $event->hostedBy);
$query->orWhere('type', $event->hostedBy);
$query->orWhere('category', $event->hostedBy);
$query->orWhere('sector', $event->hostedBy);
$query->orWhereHas('tags', function ($query) use ($tags) {
$query->where('slug', $tags->slug);
});
})
->toSql();
dd($relatedEvents);
}
。