Kezdőoldal » Számítástechnika » Programozás » Java konstruktorában if...

Java konstruktorában if feltétel helyes, vagy helytelen?

Figyelt kérdés

Van egy osztályom, amelynek 4 adattagja van, és ezek közül az egyik nem lehet negatív értékű. Azon gondolkoztam, hogy ezt a negatív dolgot hol ellenőrizzem le, a konstruktorban, vagy a setter metódusban. A program részlet:


public Point4D(double x, double y, double z, double t) {

super(x, y, z);

if(t >= 0){

this.t = t;

}

}


VAGY


public Point4D(double x, double y, double z, double t) {

super(x, y, z);

this.t = t;


és ehhez a setter metódusban van a feltétel:


public void setT(double t) {

if(t <= 0){

this.t = t;

}

}


A gond ott van, hogy ha a setterrel állítom be az értéket, tehát a második megoldás, akkor példányosításnál elfogadja a negatív értéket is.


Point4D point4d = new Point4D(1.1, 2.2, -3.3, -1);


Viszont nem tudom, hogy az első megoldás helyes-e és szabályos-e?


2013. okt. 3. 13:11
 1/6 A kérdező kommentje:

Elírás történt a setter-ben, így helyes:


public void setT(double t) {

if(t >= 0){

this.t = t;

}

}

2013. okt. 3. 13:13
 2/6 anonim ***** válasza:

Tervezésfüggő.


Lehet Contructba if-et tenni mindenféle probléma nélkül.


De ha setteren keresztül akarod meghívni, az is jó. De ha 1 függvényt csak 1x használsz azért felesleges létrehozni külön.

2013. okt. 3. 13:16
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
tedd a setterbe az ellenőrzést és hívd meg a settert a konstruktorból?
2013. okt. 3. 13:26
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
100%
Általában ( és legfőképpen Java-ban ) az a konvenció, hogy közvetlenül nem adunk értéket. Ezeket seterekkel kell megoldani, fragility, rigidity és hasonló szabályok miatt. Tehát én nem ajánlom a feltételes értékadást a konstruktorban.
2013. okt. 3. 14:30
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
Előző vagyok. Annyit még hozzátennék, hogy *osztályszintű változóknál. Nyilván nem kell mindenre set-et írni.
2013. okt. 3. 14:32
Hasznos számodra ez a válasz?
 6/6 iostream ***** válasza:
Ahogy mondja a párral ezelőtti: rakj a setterbe ellenőrzést és azt hívd meg konstruktorból. És az else ágban dobj kivételt, legalább a konstruktorban, különben értelmetlen értéket is beengedsz.
2013. okt. 3. 15:01
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!