Comment gérer les blocs dupliqués


GeunYoung.Kim

J'ai couru sonarqube, mais il m'a informé de l'erreur

"Blocs dupliqués" dans la classe Or et Argent.

J'ai modifié beaucoup de choses, mais cela n'a pas résolu le problème

Voici ma source

L'or et l'argent prolongent le plan

Voici un plan.

public abstract class Plan {
public abstract double getBasicRate();
public abstract int getBasicMinute();
public abstract double getAdditionalLineRate();
public abstract double getRatePerExcessMinute();
public abstract String getPlanName();}

Voici l'or.

public class Gold extends Plan {

private static final double BASIC_RATE = 49.95;
private static final int BASIC_MINUTE = 1000;
private static final double ADDITIONAL_LINE_RATE = 14.50;
private static final double RATE_PER_EXCESS_MINUTE = 0.45;
private static final String PLAN_NAME = "Gold";

public double getBasicRate() {
    return BASIC_RATE;
}

public int getBasicMinute() {
    return BASIC_MINUTE;
}

public double getAdditionalLineRate() {
    return ADDITIONAL_LINE_RATE;
}

public double getRatePerExcessMinute() {
    return RATE_PER_EXCESS_MINUTE;
}

public String getPlanName() {
    return PLAN_NAME;
}

}

Voici un Silver.

public class Silver extends Plan {

private static final double BASIC_RATE = 29.95;
private static final int BASIC_MINUTE = 500;
private static final double ADDITIONAL_LINE_RATE = 21.50;
private static final double RATE_PER_EXCESS_MINUTE = 0.54;
private static final String PLAN_NAME = "Silver";

public double getBasicRate() {
    return BASIC_RATE;
}

public int getBasicMinute() {
    return BASIC_MINUTE;
}

public double getAdditionalLineRate() {
    return ADDITIONAL_LINE_RATE;
}

public double getRatePerExcessMinute() {
    return RATE_PER_EXCESS_MINUTE;
}

public String getPlanName() {
    return PLAN_NAME;
}

}

Aidez-moi, s'il vous plaît

Aigu

Le code en or et en argent est identique, sauf à partir des données attribuées aux variables. Vous pouvez refactoriser quelque chose comme ceci pour supprimer la duplication:

public class Plan {

    private final double BASIC_RATE;
    private final int BASIC_MINUTE;
    private final double ADDITIONAL_LINE_RATE;
    private final double RATE_PER_EXCESS_MINUTE;
    private final String PLAN_NAME;

    public Plan(double BASIC_RATE, int BASIC_MINUTE,
            double ADDITIONAL_LINE_RATE, double RATE_PER_EXCESS_MINUTE,
            String PLAN_NAME) {
        this.BASIC_RATE = BASIC_RATE;
        this.BASIC_MINUTE = BASIC_MINUTE;
        this.ADDITIONAL_LINE_RATE = ADDITIONAL_LINE_RATE;
        this.RATE_PER_EXCESS_MINUTE = RATE_PER_EXCESS_MINUTE;
        this.PLAN_NAME = PLAN_NAME;
    }

    public double getBasicRate() {
        return BASIC_RATE;
    }

    public int getBasicMinute() {
        return BASIC_MINUTE;
    }

    public double getAdditionalLineRate() {
        return ADDITIONAL_LINE_RATE;
    }

    public double getRatePerExcessMinute() {
        return RATE_PER_EXCESS_MINUTE;
    }

    public String getPlanName() {
        return PLAN_NAME;
    }
}

Alors Goldressemblerait à quelque chose comme ceci:

public class Gold extends Plan {

    public Gold() {
        super(49.95, 1000, 14.50, 0.45, "Gold");
    }
}

Ce que nous avons fait ici, c'est de prendre du code partagé par 2 classes et de le déplacer vers sa classe parente. En appelant le super constructeur in, Goldnous affectons les variables aux valeurs requises par cette implémentation de la super classe Plan.

Nous avons également supprimé les staticvariables de classe. Cela signifie que les variables seront liées à une instance de la classe plutôt qu'à la classe elle-même.
Nous faisons cela pour que les variables dans Plansoient liées à chaque instance de Plan. Cela signifie que nous pouvons les utiliser dans les deux classes étendues sans que les données ne soient mélangées.
Dans de nombreux cas, vous n'utiliserez généralement pas à staticmoins que vous ne vouliez activement qu'une variable soit accessible sans instance de classe. Vous pouvez en savoir plus static ici .

Articles connexes


comment gérer les caractères dupliqués dans regex

catominor J'utilise cette expression régulière pour trouver TOUTES les occurrences suivantes dans un tableau : /^.*(?=.*T)(?=.*O)(?=.*T)(?=.*A).*$/ ça correspond pOTATO mATTO cATeTO mais aussi lATO minAreTO AnTicO bien que ces trois derniers mots n'aient qu'

Comment gérer les blocs lancés des exceptions avec StreamBuilder?

E. Benedos J'essaie de renvoyer un état d'erreur d'instantané à mon StreamBuilder lorsque mon fournisseur rencontre des problèmes pendant l' http.get()appel. Dans mon cas, je lance une exception lorsque le http.get()retourne un état différent de 200 (OK). Je v

Comment gérer les blocs catch et ensuite de Promise

Thamaraiselvam J'ai le code suivant function request(status){ return new Promise((resolve, reject) => { setTimeout(() => { if(status){ resolve('Success'); } else { reject('error'); } }, 1000); }); } let promise

PHP array_chunk, empêche les blocs dupliqués

machump: J'ai un éventail de personnes disons: $a = ['John', 'Amy', 'Bill', 'Jim'] Le tableau peut avoir beaucoup plus de 4 éléments. Je dois générer 2 appariements pour chaque élément avec un autre élément du même tableau sans générer d'appariements en double