Почему только объекты типа val имеют функции компонентов в kotlin? - PullRequest
0 голосов
/ 24 сентября 2018

Я изучаю Kotlin для Android.Я использую класс данных.Я пытаюсь использовать компонентные функции класса данных.Я заметил, что я получаю компонентные функции для переменной, только если переменная имеет тип «val», и я не получаю их для «var»

  var customObj: CustomObj = CustomObj("Henlo", 5)
    mlist.add(customObj)
    for ((i, v) in mlist.withIndex()) {
        //print("In loop")
       // customObj.
        if(mlist.get(i) is CustomObj)
        println(mlist.get(i))
    }

для вышеупомянутого объекта customObj.получить доступ к функциям компонента.

Если я изменю его на

  val customObj: CustomObj = CustomObj("Henlo", 5)
    mlist.add(customObj)
    for ((i, v) in mlist.withIndex()) {
        //print("In loop")
       // customObj.
        if(mlist.get(i) is CustomObj)
        println(mlist.get(i))
    }

, я получу доступ к функциям компонента.

Редактировать: Я публикую полный класс занятий

class MainActivity : AppCompatActivity() {
    var mlist = mutableListOf<Any>()
    var mlistNew = mutableListOf<String>()
    //var i = Int
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        /*  val numbers: IntArray = intArrayOf(1, 2, 3, 4, 5)
          println("Hey!! I am array Example" + numbers[2])*/
        mlist.add("this")
        mlist.add("is")
        mlist.add("my")
        mlist.add("first")
        mlist.add("kotlin")
        mlist.add("sample")
        mlist.add(1)
        mlist.add(2)
        mlist.add(3)
        mlist.add(4)
        mlist.add(5)
        mlist.add(CustomObj("my", 2))
        val customObj: CustomObj = CustomObj("Henlo", 5)
        mlist.add(customObj)
        for ((i, v) in mlist.withIndex()) {
            //print("In loop")
           // customObj.i
            if(mlist.get(i) is CustomObj)
            println(customObj.i)
        }
        //   mlist.get(0)
        for ((index, value) in mlistNew.withIndex()) {
            //   mlistNew.get(index)
        }
        mlistNew.add("one")
        mlistNew.add("two")

        // mlistNew.get(0)
    }

    private data class CustomObj(var i: String, var j: Int) : Any() {


    }
}

Итак, мой вопрос, пожалуйста, дайте мне знать, если мое понимание верно?Если да, то почему это так, потому что очень легко получить доступ к компонентным функциям, если количество параметров меньше.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Это забавная ошибка из-за андроид студии.Я не знаю, как это описать.Но когда я использую var и нажимаю alt + tab изначально, это не даст никакой опции для функции component () из списка.Затем я отфильтровываю его с помощью «comp», его статистика показывает только 2 параметра, таких как copy () и хэш-код, но все еще без параметра компонента, только когда я пишу все слово «component», он удаляет все более ранние параметры и показывает только компонент() варианты, но не более ранние.Это не тот случай, когда я использую val :) :) :)

0 голосов
/ 24 сентября 2018

Должно работать следующее:

fun main(args: Array<String>) {

    var pair = Pair("hi", "there")
    //val pair = Pair("hi", "there") // is the same

    val (hi , _) = pair
    println(hi + " " + pair.component2())
}

Не должно быть различий в сохранении в var или val.Возможно, чего-то не хватает, вы пропустили свой собственный класс данных, возможно, что-то там не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...