La classe Java ha 50 classi interne che sono Getters [chiuso]

-5

(JAVA) Ho circa 50 getter, tutti restituiscono lo stesso testo, tag, tipo. Il testo e il tag sono String e type è int. Lo scopo è una forma che utilizza campi ripetitivi insieme a campi specifici del modulo. Ho problemi con la semplificazione e il riutilizzo del codice?

classe DataTransferClass {

private DataTransferClass(){}

public class FirstName
{
    public String getText()
    {
        return "First Name:";
    }

    public String getTag(){
        return "First";
    }

    public int getType(){
        return android.text.InputType.TYPE_TEXT_VARIATION_PERSON_NAME;
    }
}

public class LastName
{
    public String getText()
    {
        return "Last Name:";
    }

    public  String getTag(){
        return "Last";
    }

    public int getType(){
        return android.text.InputType.TYPE_TEXT_VARIATION_PERSON_NAME;
    }
}

...

La risposta che sto cercando è il modo migliore per gestire i ritorni dei dati, dal momento che sto restituendo diversi tipi primitivi che restituiscono un array non funziona molto bene. Capisco che posso convertire il numero intero in stringa e restituire una matrice. Ma poi devo convertire la stringa in un numero intero quando necessario. Tutti e cinquanta i getter restituiscono gli stessi tipi primitivi. Mantenere tre array con cinquanta elementi è quasi impossibile da mantenere, aggiornare o modificare elementi specifici.

    
posta user1579736 21.12.2017 - 01:21
fonte

2 risposte

2

Sembra che tu abbia dei requisiti che stanno causando una sorta di esplosione di getter e / o campi.

A volte possiamo trovare la semplicità e il riutilizzo del codice / DRY che stiamo cercando utilizzando un motore di template, vale a dire che scriviamo del codice per generare del codice. In questo modo è possibile scrivere le cose comuni una volta (ovvero correggere gli errori in un unico punto), magari utilizzare una tabella per enumerare tutti i nomi getter / campi e quindi eseguire il codice per generare le classi. Se fosse C #, suggerirei T4. Per Java è possibile visualizzare qui ; vedi anche Metaprogramming .

In un'altra nota, se questa è una situazione interna, puoi accedere direttamente ai campi senza usare getter ... Non consigliato per un'API esterna, naturalmente, b / c che introduce alcuni la logica non può essere eseguita senza cambiare l'API e i client che lo utilizzano.

    
risposta data 21.12.2017 - 02:10
fonte
2

Per prima cosa, non sono sicuro che capisco davvero la tua domanda, quindi questa risposta potrebbe essere scostante ...

Una volta che hai molti campi simili, considera una matrice o una mappa per loro.

Ad esempio, supponendo che tu abbia già definito una classe base TestTagType per contenere le due stringhe e int, invece di

public TestTagType getFormValueName();
public TestTagType getFormValueAddress();
... 48 more ...

Considera se può essere meglio codificato come

public TestTagType getFormValue(int index);

o, meglio, qualcosa come:

public TestTagType getFormValue(String name);
public TestTagType getFormValue(FormEnum name);

Mi piace molto l'opzione Enum in quanto, quando si definisce l'Enum, esso documenta i campi del modulo. Ma se i campi continuano ad essere aggiunti o modificati, i più liberi (alcuni potrebbero argomentare "troppo loose"). L'opzione String è più pratica.

    
risposta data 21.12.2017 - 02:49
fonte

Leggi altre domande sui tag