Buonasera,
torno a tediarvi
Non è un vero problema da risolvere, sono più che altro consigli.
Vorrei scrivere, tramite la stessa classe, diverse tipologie di punteggio.
Le mie tipologie di punteggio sono due: classic e survival;
Ho creato le due liste.
Con questo codice "base" aggiungo e poi ordino i punteggi.
codice:
/**CAMPI **/
private List<Score> classicScore;
private List<Score> survivalScore;
public void addClassicScore(String name, Integer score) { this.classicScore.add(new Score(name, score));
}
public void addSurvivalScore(String name, Integer score) {
this.survivalScore.add(new Score(name, score));
}
La mia idea era di fare la stessa cosa, ma nello stesso metodo! Così, se si rendesse necessario aggiungere una modalità di gioco, potrei modificare semplicemente aggiungendo una modalità nell'enum ed una lista nella classe (l'enum è talmente banale che neanche la posto).
codice:
public void addScore(String name, Integer score, GameMode mode) {try {
Field f = this.getClass().getDeclaredField(mode.toString().toLowerCase() + "Score");
if(f.getType() == List.class) {
try {
List<Score> temp = (List<Score>) f.get(this); temp.add(new Score(name, score);
f.set(this, temp);
} catch (IllegalArgumentException e) { // TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Su questo codice che ho tirato fuori, avrei le domande:
- E' utile questa cosa? Alla fine, nel formato "base", nel caso di una modifica dovrei aggiungere una lista ed un metodo che la modifica.
Facendo così, devo aggiungere comunque la lista ed un valore all'enum "GameMode". In pratica ste linee di codice servirebbero solo per non avere codice "copiato".
Ho anche pensato alle performance...con la reflection ne perdo, vero? grrr
- l'istruzione - - List<Score> temp = (List<Score>) f.get(this); - - genera un warning Type safety: Unchecked cast from Object to List<HighscoreManager.Score>
Avendo fatto il controllo nella riga sopra, devo aggiungere il "suppress Warning" (giusto?). Solo che mi propone due modi diversi. O sopra l'istruzione incriminata, o sopra il nome del metono. Qual è la modalità corretta? Perchè?
- tutti sti catch non mi piacciono. C'è un metodo più elegante di scriverli quando ce ne sono un sacco tutti di fila?
Grazie a chi avrà voglia di rispondere!