IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème bloc statique


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème bloc statique
    Bonsoir,

    J'ai un programme qui permet de simuler des capteurs de température en fonction de différents algorithmes.

    Ces algorithmes sont créés par moi-même mais je veux laisser la possibilité aux autres développeurs d'en ajouter à leur guise.

    Le problème c'est que lorsqu'on crée un capteur, l'utilisateur a une liste des algorithmes qui existe et il peut en sélectionner un.

    Je voudrais donc permettre aux développeur d'intégrer un nouvel algorithme et qu'il apparaisse automatiquement dans ma vue.

    Pour cela, j'ai créé une classe mère qui est abstraite :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    /***
     * WARNING : Don't forget to call notifyFatherIExist() in a static block to display this algo in the mainView comboBox
     */
     
    public abstract class SensorAlgoChanger implements Serializable {
        private static ArrayList<Class> listSons = new ArrayList<>();
        private final double MIN =-273.15;
        private final double MAX = 4000;
        private final static Random RANDOM = new Random();
        public static int i;
     
        public abstract double doTemperature();
     
        public double getMin()
        {
            return MIN;
        }
        public double getMax(){
            return MAX;
        }
        public Random getRandom(){
            return RANDOM;
        }
     
     
        public static void addSon(Class classAlgo)
        {
            listSons.add(classAlgo);
        }
     
        public static ArrayList<String> getSons() {
            ArrayList<String> listReturn = new ArrayList<>();
            for (Class c : listSons) {
                int start = c.getName().indexOf(".") + 1;
                int end = c.getName().length();
                listReturn.add(c.getName().substring(start, end));
            }
            return listReturn;
        }
     
        public static void notifyFatherIExist(Class classAlgo)
        {
            addSon(classAlgo);
        }
     
     
    }
     
    Et chaque fils hérite de cette classe mère de la façon suivante : 
     
     
    public class AlgoSmallFluctuation extends SensorAlgoChanger {
        private double currentTemperature;
        private boolean isFirstTemperature;
        private double delta;
     
     
        static
        {
            System.out.println("salute");
            notifyFatherIExist(AlgoSmallFluctuation.class);
        }
     
        public AlgoSmallFluctuation(double coef, double firstTemperature)
        {
            delta = coef;
            currentTemperature = firstTemperature;
            this.isFirstTemperature = true;
        }
     
     
        @Override
        public double doTemperature() {
            if (isFirstTemperature){
                isFirstTemperature = false;
                return currentTemperature;
            }
            currentTemperature = currentTemperature + (getRandom().nextDouble()*(delta + delta) - delta);
            if (currentTemperature >= getMax())
                return getMax();
            if (currentTemperature <= getMin())
                return getMin();
            //System.out.println(previousTemperature);
            return currentTemperature;
        }
     
     
    }

    Le truc c'est que je pensais que la classe était chargée automatiquement au lancement du programme et ainsi, le bloque statique était automatiquement appelé. Du coup, si je n'est pas au préalable appelé explicitement la classe dans mon code, le bloque statique n'est jamais exécuté et ainsi, le programme n'a pas connaissance que cet algorithme existe. Existe-t-il une solution pour remédier à cela sans que le développeur n'est à rajouter du code dans les classes existantes ? (Mon projet doit respecter les principes SOLID le plus possible et ce problème viole le principe Open/Closed Principle)

    Merci de votre réponse
    Dernière modification par joel.drigo ; 16/01/2020 à 06h53.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse @joel.drigo. Les liens que tu m'as communiqué sont-ils des "extensions" à rajouter ? Car je n'ai pas le droit d'utiliser des modules externes pour mon projet.
    Dernière modification par joel.drigo ; 16/01/2020 à 06h52. Motif: suppression citation message précédent inutile

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Les SPI c'est du standard. Pas besoin d'API supplémentaire à celles du JDK.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème librairie statique
    Par apesle dans le forum C++
    Réponses: 4
    Dernier message: 30/03/2009, 23h12
  2. problème access bloqué
    Par keuls dans le forum Access
    Réponses: 3
    Dernier message: 23/03/2006, 23h50
  3. Réponses: 5
    Dernier message: 08/03/2006, 22h37
  4. [MySQL] problème de requete, bloque le chargement du site
    Par SsinedD dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 12h04
  5. Réponses: 7
    Dernier message: 21/12/2005, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo