Jak uzyskać taki efekt w kotlinie

0
public User(String name) {
    this.name = "xd" + name;
}

Jest możliwe zrobienie czegos takiego w kotlinie?

0
class User(name: String) {
    val name = "cos$name"
}

Coś takiego?

0
damianem napisał(a):
class User(name: String) {
    val name = "cos$name"
}

Coś takiego?

tak, da sie uzyskac taki efekt w data classach?

1
patryk332 napisał(a):

tak, da sie uzyskac taki efekt w data classach?

Kombinując i hackując tak np. zdefiniować w konstruktorze prywatne pole a w ciele klasy drugie z getterem który coś tam zrobi. Coś w ten deseń:

data class Foo(
val x: String,
private val _y: String
) {
    val y: String get() = "foo ${_y}"
}

Ale to nie jest dobry pomysł.

Dlaczego? Bo ideą data class jest bycie kontenerem na dane, który w dodatku można sobie łatwo kopiować, serializować i takie tam. Jak zaczynasz ładować do data class gettery które manipulują przy danych, które ten data class trzyma to już coś jest nie halo i warto się zastanowić, czy na pewno tego gettera potrzebujesz, a jeśli tak to czy na pewno powinieneś mieć tu data class.

Przez primary constructor nie. W primary constructor możesz zdefiniować jedynie faktyczne property klasy (czy to zmienne czy stałe). W ogóle data-klasy są po to, by być i trzymać dane, a nie po to

0

Bardzo na siłę, jak siebie nie lubisz, to możesz tak.

data class User private constructor(val name: String) {
  companion object {
    operator fun invoke(name: String): User {
      return User("cos$name")
    }
  }
}
0

Jeślic chcesz manipulować danymi które mają być wpisane do data classy to lepiej zrobić to w statycznej metodzie fabrykującej. W Scali takie metody umieszcza się w obiektach singletonowych. W Kotlinie chyba można w obiektach stowarzyszonych

1 użytkowników online, w tym zalogowanych: 0, gości: 1