Initialisation de membre finaux dans le bon sens ?
Bien le bonjour le forum !
j'ai une question super importante pour mon projet et pour moi même :
j'ai du pour mon projet récupérer du très vieux code (datant de java 1.2) qui me pose de gros problèmes :
en effet ce code génère très vite des erreurs à l'execution, et certaines erreurs je ne sais pas trop comment bien les corriger, en effet voici un code super réduit :
Code:
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
| public class Plop extends JPanel
{
private final Fills _fills = new Fills();
private final Colors _colors = new Colors();
public Plop()
{
...
}
public void uneMethod()
{
_colors.autreMethode();
}
private final class Colors
{
private boolean att = false;
Colors()
{
...
}
public void autreMethode()
{
...
}
}
private final class Fills
{
private Toto _info = Toto(_colors.att);
Fills()
{
}
}
} |
Vous remarquerez très vite que ce code à l'execution génère une NullPointerException sur la ligne qui permet d'initialiser Toto en utilisant _colors, en effet à ce moment, le code n'est qu'à la première ligne du code, et donc _colors n'est pas encore initilalisé
Je sais comment corriger ce code vite fait, il suffit d'intervertir les deux lignes d'init (ainsi _color est initialisé avant _fills) mais si pour une raison ou une autre on venait à réintervertir les lignes, on retombe dans le même problème.
Comment faudrait-il faire pour recoder cette classe de manière propre ?
Avec des init à null et toutes les init dans le constructeur ?
Autrement ?
Merci d'avance.