在Kotlin中未调用IsInitialized
我的日志中没有错误,但是如果(::db.isinitialized)条件下,我无法在在Kotlin中未调用IsInitialized,kotlin,Kotlin,我的日志中没有错误,但是如果(::db.isinitialized)条件下,我无法在中点击调试器 我的代码如下: main活动 class MainActivity : AppCompatActivity() { lateinit var db: DatabaseCommon; override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
中点击调试器
我的代码如下:
main活动
class MainActivity : AppCompatActivity() {
lateinit var db: DatabaseCommon;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(::db.isInitialized) {
val dbVersion = DatabaseCommon.myInstance.dbVersion;
val dbName = DatabaseCommon.myInstance.dbName;
val tableName = DatabaseCommon.myInstance.tableName;
val name: String = DatabaseCommon.myInstance.name;
val age: String = DatabaseCommon.myInstance.age;
try{
val db = this.openOrCreateDatabase(dbName, Context.MODE_PRIVATE, null)
var query = "CREATE TABLE IF NOT EXISTS ${tableName} (${name} VARCHAR, ${age} INT(2))";
db.execSQL(query)
query = "INSERT INTO ${tableName} (${name}, ${age}) VALUES ('James', 20)";
db.execSQL(query);
Toast.makeText(applicationContext, "CREATED", Toast.LENGTH_LONG);
}catch(e: Exception) {
e.printStackTrace();
}
}
}
}
数据库通用
class DatabaseCommon {
val dbVersion: Int = 1;
val dbName: String = "db_munsicians";
val tableName: String = "musicians"
val name: String = "name";
var age: String = "age";
private constructor() {}
companion object {
private lateinit var instance: DatabaseCommon;
val myInstance: DatabaseCommon
get() {
if (instance == null) {
instance = DatabaseCommon();
}
return instance;
}
}
fun returnDbClass() {
println("I was called");
}
}
如果我没有将放入(::db.isinitialized)
我会得到一个错误,即lateinit尚未初始化。如何解决此问题?您无法使用实例==null
检查来检查实例是否未初始化。当您尝试将实例
与null
进行比较时,您尝试获取实例
的值,但该值未初始化,因为它会引发异常
对于您的情况,您应该使用而不是lateinit one。您可以通过以下方式实施:
private val实例:Lazy=Lazy{DatabaseCommon()}
val myInstance:DatabaseCommon
get()=instance.value
或者这样:
val myInstance:Lazy=Lazy{DatabaseCommon()}