0
votes

Mêmes méthodes, différentes enums, comment concevoir une classe mère?

Mes classes de deux types appelées SearchType et RésultatType ont besoin d'une classe mère de manière élégante. Comment concevoir ces deux classes et une classe mère hérit d'une manière propre et de code d'économie de code? XXX PRE>

et P>

@NonNull
@ColumnInfo(name = "resultcode", defaultValue="-1")
private ResultcodeType mResultcode;


9 commentaires

Pourquoi ont-ils besoin d'une classe mère? En Java, Enums ne peut pas hériter d'une autre classe, uniquement des interfaces.


@RGETTMAN Ils partagent les mêmes méthodes - beaucoup de redondance bien sûr.


Juste curieux. Pourquoi utilisez-vous une valeur int puis essayez de trouver le type Enum pour cette valeur? Pourquoi ne pas simplement utiliser l'énumi dans votre classe? C'est ce qu'ils sont pour.


@Wjs Je sauve les valeurs int dans une base de données de la pièce.


@ S.Gissel partage-t-il le même code car ils sont sémantiquement liés ou sont-ils partagent le code "par accident" (c'est-à-dire que la mise en œuvre de la mise en œuvre giaarante à modifier de la même manière ou qu'il existe une possibilité qu'une seule mise en œuvre doit changer ou les deux avoir à changer, mais différemment)? S'ils partagent par accident, ne les couplez pas en introduisant l'abstraction.


Les deux classes ont la même fonctionnalité. Les représentent l'énumérum pour le code de haut niveau et lorsqu'il s'agit de sauver les valeurs à la base de données de la pièce, je peux obtenir le monde trop sauver dans dB. Si d'autres types sont introduits à l'avenir, ils auront besoin des mêmes méthodes de convertisseur.


Ne faites pas cuire la conversion dans le Enum . Écrivez un convertisseur distinct pour eux. Plus vous révélez d'informations, plus je reçois le sentiment que Enum n'est pas la bonne construction ( xy-problem ?). Pourriez-vous expliquer quel exactement le Enum S est utilisé?


Je ne peux vraiment pas penser à un bon moyen de faire cela en utilisant Enums. Êtes-vous tenu de les utiliser? Pourquoi pas juste une carte avec une clé entière et une valeur de valeur de chaîne? Pouvez-vous fournir plus d'informations sur ce que vous essayez d'accomplir?


@ Turing85 a modifié ma question pour expliquer où mes types sont utilisés.


3 Réponses :


2
votes

Votre Enums pourrait implémenter une interface et ajouter une méthode par défaut.

Par exemple: P>

interface Typed {
   Typed getType(int value) 

public enum ResultcodeType implements Typed {
    public Typed getType(int value) {
        for (ResultcodeType resultcodeType : 
        ResultcodeType.values()) {
            if (resultcodeType.type == value)
               return resultcodeType;
        }
        throw new IllegalArgumentException("ResultcodeType not found.");
    }


.... 
} 


3 commentaires

Je pensais à la génétique dans la classe des parents pour accepter le type de résultat et les éléments de recherche et potentiellement d'autres et ne pas mettre en œuvre les mêmes lignes de code d'EG GetType dans chaque classe dérivée.


@ S.Gissel par "Genetics" Vous voulez dire "générique"?


@ Turing85 Non, je veux dire des génériques.



0
votes

Je suggère également l'approche suivante à l'aide d'une carte au lieu de la recherche. En fait, tout ce dont vous avez besoin est la cartographie. Vous n'auriez même pas besoin de fournir une valeur. Notez que vous ne pouvez pas faire référence à une valeur statique de l'intérieur d'un constructeur, vous devez donc construire la carte de manière externe. XXX


0 commentaires

2
votes

Étant donné que Enums ne peut pas avoir de classes de base, je pense que c'est le plus proche que vous allez obtenir:

public enum ResultcodeType implements Typed {
    RESULTS(0),
    NO_RESULTS(1),
    PROBLEMS(2),
    NO_VALUE(-1);

    private final int type;

    private ResultcodeType(int type) {
        this.type = type;
    }

    @Override
    public int getNumericType() {
        return this.type;
    }

    public static ResultcodeType getType(int type) {
        return Typed.getType(values(), type);
    }
}


0 commentaires