まずこの分野については超超超初心者なので全体的に乱文となっております。ご了承ください。
現在Kotlinを使ってandroidアプリを作っています。その最中、複数のアクティビティで参照したいデータができたのでそれをグローバル変数にすることにしました。グローバル変数はApplicationクラスを継承したクラス(以下Xとする)のメンバとするわけですが、今回のデータはXのメンバ関数onCreate()で初期化した後はXの外からは参照だけできればいいので、書き換えは一切禁止したいです。
~~そこでいろいろ調べた結果setterをprivateにすれば書き換えはできなくなるとわかったのですが、~~しかし関数を通じて状態を変更することは可能でした(グローバル変数にしたいものにArrayListが含まれていたが、Xの外からでもadd()を呼び出すことが可能だった)。こうした形での変更すら禁止することは可能なのでしょうか?
グローバル変数を格納しているクラス
kotlin
1package com.example.sample 2 3import android.app.Application 4 5class Global : Application() { 6 /*↓この"al"をGlobalクラスの外から見えるようにはしたいが、中身をいじられたくはない*/ 7 val al = ArrayList<Int>() 8 9 override fun onCreate() { 10 super.onCreate() 11 12 /*alの初期化。あくまで一例。*/ 13 for (i in 0..100) { 14 al.add(i) 15 } 16 } 17}
そのグローバル変数を参照しているアクティビティ
kotlin
1package com.example.sample 2 3import android.support.v7.app.AppCompatActivity 4import android.os.Bundle 5 6class MainActivity : AppCompatActivity() { 7 override fun onCreate(savedInstanceState: Bundle?) { 8 super.onCreate(savedInstanceState) 9 setContentView(R.layout.activity_main) 10 11 val glob = application as Global 12 13 /*中身は見たい*/ 14 val num = glob.al[0] 15 /*でもこれはできないようにしたい*/ 16 glob.al.add(1) 17 } 18}
回答1件
あなたの回答
tips
プレビュー