当我在Kotlin中的某个函数上使用_id时,它指向哪一个?

时间:2018-11-06 03:24:40

标签: kotlin

A:代码A清楚,_myid中的whereSimple("$_myid = ? ",_id.toString())表示val _myid:String=DBRecordTable._ID

B:我混淆代码B,_id中的whereSimple("$_id = ? ",_id.toString())是指val _id:String=DBRecordTable._ID吗?还是fun getRecordByID(_id:Long)

顺便说一句,代码C错误,无法编译!

代码A

class DBRecordHandler(val mDBRecordHelper: DBRecordHelper =DBRecordHelper.instance,
                      val tableName:String =DBRecordTable.TableNAME,
                      val _myid:String=DBRecordTable._ID
                      ) {


      fun getRecordByID(_id:Long):MDBRecord? = mDBRecordHelper.use{
          select(tableName)
              .whereSimple("$_myid = ? ",_id.toString())
              .parseOpt{MDBRecord(HashMap(it)) }
      }
}

代码B

class DBRecordHandler(val mDBRecordHelper: DBRecordHelper =DBRecordHelper.instance,
                      val tableName:String =DBRecordTable.TableNAME,
                      val _id:String=DBRecordTable._ID
                      ) {


      fun getRecordByID(_id:Long):MDBRecord? = mDBRecordHelper.use{
          select(tableName)
              .whereSimple("$_id = ? ",_id.toString())
              .parseOpt{MDBRecord(HashMap(it)) }
      }
}

代码C

class DBRecordHandler(val mDBRecordHelper: DBRecordHelper =DBRecordHelper.instance,
                      val tableName:String =DBRecordTable.TableNAME,
                      val _id:String=DBRecordTable._ID
                      ) {


      fun getRecordByID(_id:Long):MDBRecord? = mDBRecordHelper.use{
          select(tableName)
              .whereSimple("${this._id}= ? ",_id.toString())
              .parseOpt{MDBRecord(HashMap(it)) }
      }

}

1 个答案:

答案 0 :(得分:1)

变量的“更本地化”版本是将要使用的版本,即,在函数中声明为参数的版本,而不是声明为类的构造函数参数的版本。这称为阴影。

请注意,如果您按ctrl键并单击代码中的变量,IDE将带您进入其声明,因此您可以在引用该代码的任何位置查看将要使用哪个实例。 / p>

相关问题