Lanciare un'eccezione se alcune proprietà non sono presenti in un file di proprietà

5

non è un grosso problema di programmazione, ma sono curioso di sapere se dovrebbe essere fatto meglio. Quindi ho un file di configurazione che sto leggendo tramite java.util.Properties class. Quando la proprietà non è presente in un file getProperty() metodo restituisce null. Vorrei lanciare un'eccezione se qualche proprietà non è presente nel file di configurazione. Quindi come dovrei farlo?

Mi vengono in mente due idee, ma penso che ci dovrebbe essere un altro modo per farlo. Il primo è che dopo ogni chiamata di getProperty() vorrei fare if (prop == null) throw new SomeException , ma non sarebbe bello se ci fosse un uguale se dopo ogni due righe. Il secondo approccio consiste nel fare un grande if dopo aver letto tutte le proprietà e controllarle tutte contemporaneamente.

    
posta ctomek 08.09.2015 - 14:34
fonte

2 risposte

11

Terza opzione è che crei una classe derivata di Proprietà che fa questo per te:

public class Configuration extends Properties {
    public String getProperty(final String key) {
        final String property = super.getProperty(key);
        if(property == null) {
            throw new InvalidParameterException(MessageFormat.format("Missing value for key {0}!", key)));
        }
        return property;
    }

    public String getProperty(final String key, final String defaultValue) {
        // Throw exception here as above if you want to throw exception even with defaultValue
        return super.getProperty(key, defaultValue);
    }
}

Lo chiamo Configuration perché è uno scenario in cui le proprietà mancanti potrebbero causare un'eccezione, anche se puoi chiamarla come preferisci. Come ora, chiamando getProperty dato parametro defaultValue , non genererà un'eccezione (poiché presumibilmente stai bene con un valore che non è lì).

Da una nota a margine, dovresti chiederti se è davvero questo il modo in cui vuoi gestirlo. Può accadere che non ci siano valori che ci si aspetta di trovare in un file di proprietà. In tal caso non c'è nulla di eccezionale a riguardo. Tuttavia, se si prevede di trovare valori molto specifici che causeranno il fallimento dell'applicazione se non sono presenti, allora questa soluzione è soddisfacente.

Spero che questo aiuti.

    
risposta data 08.09.2015 - 14:49
fonte
2

La soluzione migliore sarebbe quella di creare una classe Configuration che si inizializza con la posizione del file delle proprietà o un oggetto properties, quindi ottiene tutte le informazioni necessarie da quella nel costruttore e genera un'eccezione se non riesce a trovare le informazioni necessarie (o usa un valore predefinito se puoi usarne uno).

Questo ha il vantaggio che dopo l'avvio, tu sai di avere tutti i valori che ti servono, e non devi mai più controllare. Non c'è bisogno di diffondere le istruzioni if su tutto il tuo codice.

Inoltre, se si utilizzano i valori predefiniti, li si trovano in un unico punto, anche se si utilizzano le impostazioni in più posizioni. Bello e ASCIUTTO.

Il controllo non nullo può essere un metodo notNull(value, message) di utilità che restituisce value , che consente di ridurre le istruzioni if.

Down-side: si finisce con un oggetto God conoscendo tutti i nomi di configurazione. Anche in questo caso è possibile risolvere istanze di diversi SubComponentNameConfiguration per i sottocomponenti specifici.

PS: il vero divertimento si verifica quando determinate proprietà significano "leggere alcune configurazioni specifiche da file in posizione value "

    
risposta data 11.09.2015 - 19:58
fonte

Leggi altre domande sui tag