0
respostas

JVM name

Olá! Estava experimentando com a linguagem e me deparei com um problema quando se usa uma atributo protected... O kotlin reclama quando crio getters ou setters com os nomes setName() getName() ou qualquer outro nome convencional, pois entra em conflito com algo da JVM...

Teoricamente, em C# por exemplo, vc apenas deixa protected o atributo, quano se vai utilizar herança, e cria os getters e setters normalmente, mas em Kotlin para que isso possa ser feito, aparentemente tenho q colocar uma anotação " @JvmName("getName1")".

Poderiam esclarecer pq isso acontece?

Eu resolvi de 2 formas:

Deixei como privado o atributo, e na classe filha dessa super classe, busquei os atributos com super.getName().

open class Account(name: String, amount: Double) {

    private var name: String = name

     val accountNumber: Int =
        Random.nextInt(0, 1000)

    var balance: Double = amount

    fun getName(): String {
        return name
    }

class AccountVIP(name: String, amount: Double) : Account(name, amount) {
    val premiumNum: Int = Random.nextInt(1, 1000)

    override fun statementPrint() {
        println("${super.getName()}'s account Statement")
        println("-----------------------------------")
        println(
            "Nome: ${super.getName()}\n" +
                    "Acc Number: ${accountNumber}\n" +
                    "Amount: ${balance}\n" +
                    "VIP Number: ${premiumNum}\n"
        )
    }

Usei o private set abaixo do atributo na classe mãe, o que protege, mas ainda permite que a main veja o atributo.

open class Account(name: String, amount: Double) {

    var name: String = name
        private set

    val accountNumber: Int =
        Random.nextInt(0, 1000)

    var balance: Double = amount
    }

Qual é a resolução usada nesse tipo de problema?