0
votes

Comment remplacer les restrictions de Java pour les objets

J'ai donné une instance de la classe d'objet (chaîne, int, double ou booléen) d'une base de données. J'ai besoin d'écrire une méthode qui peut comparer cet objet à quelque chose d'autre (chaîne, int, double ou booléen) à l'aide de opérateurs binaires (par exemple , Etc.). Je ne dirigerai cette méthode que si les deux objets sont du même type. Ma méthode ressemble à

    public boolean comparison(Object a, Object b, String operator) {
         int result = a.compareTo(b);
         String a2 = a.getClass().getName();
         //followed by if/else if blocks to return true or false 
         //depending on operator and result
    }


1 commentaires

J'ai posté ma propre solution. Il y a une période de deux jours avant de pouvoir l'accepter. Je vais l'accepter alors.


3 Réponses :


1
votes

Étant donné que la méthode comparète code> est déclarée dans le java.lang.comparable code> interface, l'utilisation de Paramètres de type bornée peut contraindre votre A code> et B code> arguments afin d'accepter uniquement des objets qui implémentent l'interface elle-même.
Vous pouvez vérifier le paramètre opérateur code> afin d'affecter le résultat booléen.
Si vous le souhaitez, l'utilisation d'un ENUM code> aide à éviter l'inadéquation de la chaîne.
Pour la brièveté, le code ci-dessous ne prend pas en compte null code> valeurs.

enum Operator {
    GREATER_OR_EQUALS,
    LESS_OR_EQUALS
}

public <T extends Comparable<T>> boolean comparison(T a, T b, Operator operator) {
    int test = a.compareTo(b);
    switch(operator) {
        case GREATER_OR_EQUALS:
            return test >= 0;
        default:
            return test <= 0;
    }
}


0 commentaires

1
votes

La voie Java est de d'abord utiliser l'opérateur d'instance à une classe appropriée: xxx

comparète () donne vous un résultat négatif si a , 0 lorsque a == b et un résultat positif si a> b . Donc, seul du résultat INT vous dit suffisamment pour décider des opérations de comparaison potentielles. Les types numériques int / integer , ... ont des méthodes similaires.

Bien sûr, cela ne fonctionne bien que si vos hypothèses sont vraiment correctes et que l'objet est vraiment une chaîne ou booléen . Et veuillez noter que booléen et booléen sont deux types d'une manière ou d'une autre manière différente!


0 commentaires

-1
votes

Variables de coulée en Java

La réponse supérieure résume ce que je voulais faire. Le code compilé avec succès lorsque j'ai dit P>

int result;
if (a instanceof Comparable && b instanceof Comparable) {
   result = ((Comparable) a).compareTo((Comparable) b);
}


0 commentaires