Créer une classe ayant le comportement d'une classe interne

Créer une classe ayant le comportement d'une classe interne - Java - Programmation

Marsh Posté le 25-05-2015 à 18:18:58    

Bonjour, je voudrais créer une classe qui pourrai accéder au attribut d'autre classe qui l'utilise selon une définition abstraite.
Par exemple :

Code :
  1. public abstract class Launcher{
  2.     // des attributs, des methodes, pleins de trucs ne pouvant etre dans une interface
  3.     public abstract void run();
  4. }
  5. public class A {
  6.     private int attr1;
  7.     private Launcher launcher;
  8.    
  9.     // Constructeur ...
  10.     public void setLauncher(){
  11.    
  12.         launcher = new Launcher(){
  13.              @Override
  14.              public void run(){
  15.                  attr1++; // ceci ne marche pas puisqu'on change de context  
  16.              }
  17.         }
  18.     }
  19.     public void launch(){
  20.         launcher.run();
  21.     }
  22. }
  23. // une class B ayant un comportement similaire à A


 
Mon réel problème est à peu prés similaire à ça, et bien sur ici ma classe Launcher est assez grosse et il serai fâcheux de la dupliqué en plusieurs classe interne (surtout que des éléments static m'intéresse)
Ma question est donc :
Avez-vous une solution à ce problème ?
 
Merci d'avance :)  

Reply

Marsh Posté le 25-05-2015 à 18:18:58   

Reply

Marsh Posté le 25-05-2015 à 18:34:46    

Ok desolé du double post mais j'ai trouvé une solution, qui est d'utiliser une interface (Runnable) et de la définir dans le context que l'on veux
Comme ceci :

Code :
  1. public class Launcher{
  2.     // des attributs, des methodes, pleins de trucs ne pouvant etre dans une interface
  3.     private Runnable runnable;
  4.     public void run(){
  5.          runnable.run()
  6.     }
  7. }
  8. public class A {
  9.     private int attr1;
  10.     private Launcher launcher;
  11.    
  12.     // Constructeur ...
  13.     public void setLauncher(){
  14.    
  15.         launcher = new Launcher(new Runnable(){
  16.              @Override
  17.              public void run(){
  18.                  attr1++;
  19.              }
  20.         });
  21.     }
  22.     public void launch(){
  23.         launcher.run();
  24.     }
  25. }


Message édité par didibear le 25-05-2015 à 18:35:29
Reply

Marsh Posté le 25-05-2015 à 21:45:49    

Nul besoin d'utiliser Runnable qui n'est VRAIMENT pas fait pour ce que tu souhaites faire.
 
Java gère très bien l'override de méthode:
 
http://beginnersbook.com/2014/01/m [...] h-example/
 
Tu peux donc avoir un bloc commun -pas forcément abstrait- dont les classes hérites, et override ce qui a besoin d'être override pour avoir des comportements différents.
 
Par défault, tu as aussi besoin de connaitre peut-être l'existence de protected, qui est entre public et private comme def (sait-on jamais), et qui donc te permettra d'aller les chercher les propriétés du parent si besoin dans ton override niveau fils.
 
EDIT: en tout cas c'est ce que je comprend de ton exemple, je vois pas pourquoi tu binds de la sorte tes deux classes...


Message édité par Devil'sTiger le 25-05-2015 à 21:48:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed