Cześć, nie bardzo mogę zrozumieć czemu w Scali klasy kowariantne mogą mieć tylko gettery, a kontrawariantne settery? Na razie na tapetę wziąłem sobie klasy kowariantne.
Przy takiej deklaracji klasy:
class CovariantClass[+T] (var x: T) {
}
//bład
covariant type T occurs in contravariant position in type T of value x_=
class CovariantClass[+T] (var x: T) {
Otrzymam błąd gdyż przez var utworzy się getter i setter. Przeczytałem, że w takiej klasie może być setter jednak musi on zwracać nową instancję - tu jednak pojawia się problem, że nie umiem napisać takiego settera :(
Mój setter wygląda tak:
def setx_= (value: T): CovariantClass[T] = new CovariantClass[T](value)
Jednak IDE podpowiada mi taki sam błąd jak we wcześniejszym przypadku.
Podsumowując, czemu klasy kowariantne mogą mieć tylko getter?
Jak napisać taki setter?