2

i'm new to kotlin for android. and i want to access class member that having same name in extension function. for example:

   var visibility = null //class level variable

    //EXTENSION FUNCTION
    fun ProgressBar.changeVisibleState(flag: Boolean) {
        if (flag)
            visibility = View.VISIBLE
        else
            visibility = View.INVISIBLE
    }

how can i access visibility in changeVisibleState method.

Pradeep Kumar
  • 586
  • 3
  • 19

2 Answers2

3

With a qualified this this@Hello you can access Hello's property instead of ProgressBar's.

class Bye {
    var visibility: Int = 0 //class level variable
}
class Hello {
    var visibility: Int = 0 //class level variable

    fun Bye.changeVisibleState(flag: Boolean) {
        //access Bye's prop
        visibility = if (flag) 1 else 2
        //access Hello's prop
        this@Hello.visibility = 12
    }
}
s1m0nw1
  • 76,759
  • 17
  • 167
  • 196
2

You can use this operator.

class Hello {
    var visibility: Int = 0 //class level variable

    //EXTENSION FUNCTION
    fun ProgressBar.changeVisibleState(flag: Boolean) {
        if (flag)
            this@Hello.visibility = View.VISIBLE
        else
            this@Hello.visibility = View.INVISIBLE
    }
}
s1m0nw1
  • 76,759
  • 17
  • 167
  • 196
Bhuvanesh BS
  • 13,474
  • 12
  • 40
  • 66