Stavo cercando di capire come funziona davvero enum Java e sono giunto alla conclusione che è molto simile a una normale classe Java che ha dichiarato privato il costruttore.Quali sono le differenze tra un enum Java e una classe con il costruttore privato?
Sono appena arrivato a questa conclusione e non si basa su molto pensare, ma mi piacerebbe sapere se mi manca qualcosa.
Quindi di seguito è un'implementazione di un semplice enum Java e una classe Java equivalente.
public enum Direction {
ENUM_UP(0, -1),
ENUM_DOWN(0, 1),
ENUM_RIGHT(1, 0),
ENUM_LEFT(-1, 0);
private int x;
private int y;
private Direction(int x, int y){
this.x = x;
this.y = y;
}
public int getEnumX(){
return x;
}
public int getEnumY(){
return y;
}
}
Qual è la differenza di significato tra il codice sopra e sotto?
public class Direction{
public static final Direction UP = new Direction(0, -1) ;
public static final Direction DOWN = new Direction(0, 1) ;
public static final Direction LEFT = new Direction(-1, 0) ;
public static final Direction RIGHT = new Direction(1, 0) ;
private int x ;
private int y ;
private Direction(int x, int y){
this.x = x ;
this.y = y ;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
Buona domanda, sono davvero simili in molti modi :) Con molte differenze anche io sono sicuro che le buone risposte qui delineeranno. –
Almeno tre differenze a cui posso pensare: [1] non sarai in grado di passare a quest'ultima implementazione (es. 'Direzione d; interruttore (d)'), [2] 'Direzione.toString()' le implementazioni saranno diverse, [3] Il metodo enum consente di ottenere tutte le istanze della "classe" tramite '.values ()' considerando che il metodo di classe non lo fa. – jedwards
Perderai 'values ()', 'valueOf()' e 'ordinal()'. –