2
respostas

Aula 5 - Uso de construtores com as propriedade

Quando se usa um construtor não há como usar a property, o set e get do atributo com modificação do valor? Como o código está funciona, quando tentei colocar o construtor para titular e conta, deu erro.. Segue o meu exemplo:

// Assim funciona
 val contaMarcelo = Conta()
 contaMarcelo.titular = "MARCELO"
 contaMarcelo.numeroConta = 500

class Conta() {
    var numeroConta = 0    
    var titular = ""
            set (nome) {
                    field = nome.toUpperCase()
            }
                get(){
            if (field != null && !field.isEmpty) {
                        var l = field.subSequence(0, 1).toString()
                        var n = field.subSequence(1, field.length).toString()
                        field = l.toUpperCase() + n.toLowerCase()
            }
                    return field
            }    
    Resposta : Marcelo


// Assim dá erro
val contaMarcelo = Conta("MARCELO", 500)

class Conta(titular:String, numeroConta:Int) {
    var numeroConta = 0    
    var titular = ""
            set (nome) {
                    field = nome.toUpperCase()
            }
                get(){
            if (field != null && !field.isEmpty) {
                        var l = field.subSequence(0, 1).toString()
                        var n = field.subSequence(1, field.length).toString()
                        field = l.toUpperCase() + n.toLowerCase()
            }
                    return field
            }
2 respostas

Opa, será que se a property titular receber o parâmetro do construtor resolve o seu problema? Do jeito que está o código, o titular será sempre uma string vazia (""), assim acontece um erro de index fora dos limites no seu get quando se utiliza o subSequence.

...

class Conta(titular: String, numeroConta: Int) {
    var numeroConta = numeroConta
    var titular = titular

...

A questão não é se vem ou não o valor, isso é resolvido com um teste. A questão é que se isso não é possível fazer.