Quindi, ad esempio, diciamo che abbiamo un abstract class
chiamato Question
, quella domanda contiene un sacco di stringhe, una per la domanda stessa, una per la risposta e due risposte inviate a l'utente, se ha ottenuto la domanda giusta/sbagliata.Best practice per il salvataggio dei dati in classi astratte
public abstract class Question {
private final String question;
private final String answer;
private final String answerCorrect;
private final String answerWrong;
}
La mia domanda è fondamentalmente, quale sarebbe un modo comune per inizializzare tutte le stringhe? Finora ho inventato 2 versioni su come farlo, hanno i loro aspetti negativi e negativi e volevo sapere se c'era una sorta di "migliore pratica di codifica" per questo.
Versione A
Inizializzare tutto nel costruttore.
public abstract class Question {
//...
public Question(String question, String answer, String answerCorrect, String answerWrong) {
this.question = question;
this.answer = answer;
this.answerCorrect = answerCorrect;
this.answerWrong = answerWrong;
}
}
Questo sembra abbastanza conveniente, l'unico problema che ho con questo è che gli utenti non saranno sicuri, in cui ordinare le stringhe devono essere.
public class ExampleClass extends Question {
public ExampleClass() {
super("I think, that's the answer", "and that's the question", "answer wrong?", "answer right?");
}
}
Versione B
Non inizializzare immediatamente e attendere che l'utente per farlo.
public abstract class Question {
//...
public Question() {
this.question = "";
this.answer = "";
this.answerCorrect = "";
this.answerWrong = "";
}
public void setQuestion(String question) {
this.question = question;
}
//...
}
questo rende più facile per inizializzare le variabili, ma le stringhe non può più essere final
e non è garantito che l'utente inizializzerà tutti loro.
Ho anche pensato di lasciare il bambino classe implementare metodi astratti che vengono chiamati nel costruttore di Question
per inizializzare tutte le stringhe e per tenerli final
, ma quella versione sembrava un po 'troppo strano per me .
Ci sono altri/modi migliori per farlo? Quale versione dovrei preferire?
Grazie in anticipo per il vostro supporto.
In questo caso speciale, voterei per la versione A. Perché? Perché vuoi creare immutables. I loro valori non cambieranno dopo la creazione. – Fildor
Il tuo codice non compilazione se i tuoi attributi sono 'final' e si mette un' setter' – nachokk
@nachokk ho parlato: "(...) le stringhe non possono più essere definitiva (...)" –