Chcę utworzyć klasę kowariantyczną, która jest zmienna, więc muszę dodać niższy typ związany z metodą ustawiającą. Ale chcę również, aby metoda ustawiająca ustawiła pole, więc domyślam się, że pole musi być powiązane z tym samym typem?Dolny typ związany w polu Scala w zmiennym, zmiennym klasie?
class Thing[+F](initialValue: F) {
private[this] var secondValue: Option[G >: F] = None
def setSecondValue[G >: F](v: G) = {
this.secondValue = Some(v)
}
}
Metoda kompiluje dobrze. Ale pole o nazwie secondValue nie skompilować w ogóle, z komunikatem o błędzie:
Multiple markers at this line
- ']' expected but '>:' found.
- not found: type G
Co muszę zrobić?
doskonały - robi to, co chcę. Próbowałem używać forSome w metodzie i to też działa: def setSecondAroma (secondAroma: G forSome {type G>: F}) = ... –
@JohnSmith Nie wiem, czy użycie forSome G w setSecondValue ma jakieś (dis) zalety w porównaniu do zwykłego argumentu typu G. Jeśli znasz/dowiadujesz się, opublikuj go tutaj. –
Należy zauważyć, że typ 'G' w polu nie ma nic wspólnego z typem' G' w metodzie tutaj. –