Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Java] Consigli su del codice

    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!
    Ultima modifica di Mirco993; 10-07-2018 a 00:41

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Mirco993 Visualizza il messaggio
    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);
    [....]
    Su questo codice che ho tirato fuori, avrei le domande:
    - E' utile questa cosa?
    Ma no, assolutamente per niente!! E' del tutto fuori luogo tirare in ballo la "reflection" di Java per una cosa del genere.
    Se GameMode è una (banalissima) enum del tipo es.:

    codice:
    public enum GameMode {
        CLASSIC, SURVIVAL
    }

    Allora nel addScore sarebbe sufficiente uno "switch" sulla enum:

    codice:
    public void addScore(String name, Integer score, GameMode mode) {
        switch (mode) {
        case CLASSIC: classicScore.add(new Score(name, score)); break;
        case SURVIVAL: survivalScore.add(new Score(name, score)); break;
        }
    }

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.