LINUX.ORG.RU

Не получается set в классе

 ,


0

1
class Cat(val name: String, weight_param: Int, breed_param: String) {

    var activities = arrayOf("Play")
    val breed = breed_param.toUpperCase()
    
    var weight = weight_param
        set(value) {
            Log.d("TAG", "in set()")
            if (value > 0) {
                Log.d("TAG", "yes")
                field = value
            }
            else {
                Log.d("TAG", "no")
                field = 0
            }
        }
    
    val weightInGramms: Int
        get() = weight * 1000

    fun sleep() {
        println(if (weight < 3) "сопит!" else "храпит!")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("TAG", "----------------------------")

        val cat = Cat("Васька", -3, "Дворовая")
        Log.d("TAG", cat.weightInGramms.toString()) // возвращает 3000
        
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_main)
        text_id.setText("zzz2")
        // text_id.setText(getWarmth(c).toString())
    }

}
★★★★

Ответ на: комментарий от cdshines

я так понимаю, что set срабатывает не при инициализации, а тогда, когда мы пытаемся проапдейтить переменную экземпляра, верно?

package com.example.socialkotlin
import android.graphics.Color.*
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.util.concurrent.Executors
import kotlin.system.*
import kotlinx.android.synthetic.main.content_main.*
// import kotlinx.coroutines.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
// import kotlinx.coroutines.CommonPool
import kotlinx.coroutines.async
import kotlinx.coroutines.AbstractCoroutine
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope

import java.util.concurrent.*
import kotlinx.coroutines.channels.*
import kotlinx.coroutines.channels.actor


class Cat(val name: String, weight_param: Int, breed_param: String) {

    var activities = arrayOf("Play")
    val breed = breed_param.toUpperCase()
    
    var weight = weight_param
        set(value) {
            Log.d("TAG", "in set()")
            if (value > 0) {
                Log.d("TAG", "yes")
                field = value
            }
            else {
                Log.d("TAG", "no")
                field = 0
            }
        }
    
    val weightInGramms: Int
        get() = weight * 1000

    fun sleep() {
        println(if (weight < 3) "сопит!" else "храпит!")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("TAG", "----------------------------")

        
        val cat = Cat("Васька", -1, "Дворовая")
        Log.d("TAG", cat.weightInGramms.toString()) // возвращает 3000
        cat.weight = -14
        Log.d("TAG", cat.weightInGramms.toString()) // возвращает 3000
        
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_main)
        text_id.setText("zzz2")
        // text_id.setText(getWarmth(c).toString())
    }

}

out:

04-28 18:31:18.027 22650 22650 D TAG     : ----------------------------
04-28 18:31:18.029 22650 22650 D TAG     : -1000
04-28 18:31:18.029 22650 22650 D TAG     : in set()
04-28 18:31:18.029 22650 22650 D TAG     : no
04-28 18:31:18.029 22650 22650 D TAG     : 0

А как бы прочекать это значение у переменной экземпляра на стадии инициализации

bryak ★★★★ ()