Java podstawy - problem z seterem

0

Mam dosyć podstawowy problem, chce stworzyć setter w klasie gdzie mam założone warunki:
Jeżeli nazwa owocu to Kiwi cena owocu musi być z przedziału <1.2, 4.5>, natomiast w pozostałych przypadkach cena owocu musi być z przedziału <0.4, 2.3>..
Czy taki setter ma prawo bytu?Mnie osobiście kole w oczy, ale nie mogę wymyślić jak to ogarnąć przy 2 założeniach(nazwa owocu i warunek ceny).
Mój kod:

public void setCenaKg(double cenaKg) {
  	if(nazwa.equals("kiwi") && cenaKg>=1.2 && cenaKg<=4.5)`
	{
		this.cenaKg = cenaKg;
	}
	else if(cenaKg>=0.4 && cenaKg>=2.3)
	{
		this.cenaKg = cenaKg;
	}
	else
	{
		cenaKg = 1.2;
	}	
}
0
  1. Formatuj kod. Kod nie wygląda jak kupa z powodu formatowania, ale dlatego, że jest źle napisany.
  2. Nie porównujemy double za pomocą operatorów.
  3. Nie trzymamy pieniążków w zmiennej double. Pieniążki to coś więcej niż floating point. Minimum użyj BigDecimal
  4. Setter to nie najlepsze miejsce na takie walidacje. Może jakiś Validator napisz, bo inaczej taka klasa to kandydat na 8-tysięcznik?
  5. Nazwy po angielsku, bo wychodzi polglish.

Moja wersja z guavą nie każdemu może się podobać:

    public void setPricePerKg(BigDecimal pricePerKg) {
        if("kiwi".equals(nazwa)){
            if(Range.closed(new BigDecimal(2.5), new BigDecimal(4.5)).contains(pricePerKg)){
                this.pricePerKg = pricePerKg;
                return;
            }
        } else if(Range.closed(new BigDecimal(0.4), new BigDecimal(1.2)).contains(pricePerKg)){
            this.pricePerKg = pricePerKg;
            return;
        }
        throw new IllegalArgumentException("Wrong price?")
    }
0

Faktycznie porównywanie double za pomocą operatorów głupota za którą przepraszam!! Ale kiedy chce mieć przedział zmiennoprzecinkowy 1,2 do 4,5 to zgupiałam.

0

Jak dla mnie odpowiedz @nie100sowny to przerost formy nad treścią.
Setter powinien ustawiać wartości - brak w nim logiki.
W osobnej metodzie powinnaś sprawdzać założenia i ustawić wartość setterem.

0

Pan @nie100sowny właśnie nie zrozumiał treści problemu: seter ma mieć takie warunki jakie przedstawiłam i już - argument że seter to nie najlepsze miejscie na takie rozwiązanie można sobie w nos wsadzić. Warunek ma być taki że w tej klasie - (gdzie są takie pola składowe jak -cena nazwa i waga) -i że owoc jest kiwi to jest ustalona cena od 1.2 do 4.5(PRZEDZIAŁ!)

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