Sto riscrivendo del codice e ho deciso il modo di ricreare la classe, dato che ci sono un numero fisso di fogli, li sto creando come enumerazioni . Questa è una decisione basata sulla leggibilità di un builder di build rispetto a un costruttore telescopico.Posso usare il modello di builder su Java Enum
Il codice Sto prendendo alcuni file .xls, aggiungo intestazioni (e ne lessi alcuni da altri file .xls) e forse alcuni sotto-fogli. Unisce quindi una varietà di questi fogli insieme in un modo specifico per creare schede su una cartella di lavoro principale di Excel. Il mio problema è che alcune schede della cartella di lavoro richiedono numeri diversi di fogli sono argomenti. Sto provando ad applicare il modello di builder. Questo è il tipo di codice che sto cercando di scrivere:
public enum workBookSheet {
mySheet1("Name1","mainSheet1.xls",true,1).addSubSheet("pathToSubSheet1.xls"),
mySheet2("Name2","mainSheet2.xls",true,2).addHeaderSheet("pathToHeaders.xls").addSubsheet("pathtoSubSheet2.xls");
private String tabName;
private String mainSheetName;
private Boolean available;
private Integer order;
private String subSheetName;
private String headerSheetName;
private workBookSheet(String tabName, String mainSheetName, Boolean available, Integer order){
this.tabName = tabName;
this.mainSheetName = mainSheetName;
this.available = available;
this.order = order;
}
public workBookSheet addSubSheet(String subSheetName){
this.subSheetName = subSheetName;
return this;
}
public workBookSheet addHeaderSheet(String headerSheetName){
this.headerSheetName = headerSheetName;
return this;
}
}
L'errore che Java sta dando a me sembra dire che Java si aspetta che la mia dichiarazione enum (virgole elenco dei 'costruttori enum' delimitato in alto) avere solo il costruttore in esso, e non metodi aggiuntivi. Posso spostare questi metodi in un metodo "costruttore" di seguito, senza lamentarsi.
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
È questo l'unico modo per realizzare un builder su un enum? Mi richiede di eseguire un metodo separato, che non è troppo fastidioso. Mi sembra che sto rompendo il modello (suppongo, non così male se funziona.)
NB Ho avuto una buona occhiata in giro per vedere se qualcun altro ha posto questa domanda, su SO o altrove sul web. Il più vicino che ho trovato era una domanda qui su Enums and Factories, ma questo non risponde alla mia domanda. Inoltre sono consapevole che questo non è proprio il modello di builder, in quanto non ho una classe separata che accetta un metodo build() che crea una nuova enumerazione. Immagino che questa sia la radice del problema nella mia progettazione iniziale, ma sono relativamente nuovo in Java.
Quindi, c'è un modo migliore per utilizzare un modello di build su un enum Java? O è quello che ho 'abbastanza vicino'?
È qualcosa che hai usato in precedenza o è questo nuovo codice che hai scritto come esempio? – Pureferret
Un po 'di entrambi. Volevo usare un costruttore, ho trovato alcune risposte ma non mi piacevano e ho pensato di farlo in questo modo. Poi ho pensato di condividere la mia soluzione in questa domanda nel caso in cui aiutasse qualcuno. –
Grazie mille! Ciò ha reso la mia lezione di enumerazione molto più leggibile. –