public User(String name) {
this.name = "xd" + name;
}
Jest możliwe zrobienie czegos takiego w kotlinie?
public User(String name) {
this.name = "xd" + name;
}
Jest możliwe zrobienie czegos takiego w kotlinie?
class User(name: String) {
val name = "cos$name"
}
Coś takiego?
damianem napisał(a):
class User(name: String) { val name = "cos$name" }
Coś takiego?
tak, da sie uzyskac taki efekt w data classach?
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
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")
}
}
}
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