|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
[OOP-Generico-Java] Pare mentali per uno switch-case
Buondì,
ho una enum java scritta così: Codice:
public enum Posizione
{
CENTRO, N, NE, E, SE, S, SW, W, NW;
public Point asPoint()
{
int stepW = SCREEN.width/3;
int stepH = SCREEN.height/3;
Point point = new Point();
switch (this) {
case CENTRO: point.setLocation(1.5*stepW, 1.5*stepH);
break;
case N: point.setLocation(1.5*stepW, 0.5*stepH);
break;
case NE: point.setLocation(2.5*stepW, 0.5*stepH);
break;
case E: point.setLocation(2.5*stepW, 1.5*stepH);
break;
case SE: point.setLocation(2.5*stepW, 2.5*stepH);
break;
case S: point.setLocation(1.5*stepW, 2.5*stepH);
break;
case SW: point.setLocation(0.5*stepW, 2.5*stepH);
break;
case W: point.setLocation(0.5*stepW, 1.5*stepH);
break;
case NW: point.setLocation(0.5*stepW, 0.5*stepH);
break;
}
return point;
}
}
Codice:
// altrove...
private void posizionaOggetti()
{
oggettoIniziale.centerOn(pos1.asPoint());
Point p = pos2.asPoint();
for (Drawable d : oggettiFinali) {
d.centerOn(p);
}
}
Di primo acchitto mi verrebbe da usare il polimorfismo: creo una interfaccia Posizione che come contratto dichiara un metodo "getPoint" che non prende nulla e restituisce un Point. Ma così dovrei implementare 9 sottoclassi: una per ogni "posizione" (CENTRO, N, NE, E, SE, S , SW, W, NW). Esiste un'alternativa? Non è che non ci dormo la notte, lo switch può anche restare, ma mi domandavo se esistesse una soluzione della serie "semplice & elegante" a la OOP
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Gli enumerativi possono avere un costruttore. Possono anche concretizzare interfacce ma sfortunatamente non c'è un'interfaccia alla radice dei punti quindi asPoint non è una cattiva idea. Comunque:
Codice:
public enum Posizione {
CENTRO(1.5,1.5), N(1.5,0.5), ECCETERA...
private final Point BUFFER = new Point();
private final int X, Y;
Posizione(int x, int y) {
int stepW = SCREEN.width/3;
int stepH = SCREEN.height/3;
X = stepW * x;
Y = stepH * y;
}
public Point asPoint() { BUFFER.x = X; BUFFER.y = Y; return BUFFER; }
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Credo basti una mappa ENUM -> (X, Y), e una volta ottenuti questi valori sarebbe sufficiente un banale point.setLocation(X, Y).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@PGI-Bis:
Grazie mille, prezioso come sempre! Sapevo della faccenda dei costruttori per gli enum type, ma non riuscivo a visualizzare il modo di utilizzarlo... grazie! @cdmauro: grazie del suggerimento; a livello pratico, con le enum di Java si traduce nella soluzione proposta da PGI, se non ho capito fischi per fiaschi.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:05.



















