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

Langage Java Discussion :

instanciation de fonctions par objet


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 26
    Billets dans le blog
    1
    Par défaut instanciation de fonctions par objet
    Bonjour
    longtemps que je n'ai pas fait de java...

    Je voudrais une classe :
    (réduite au plus simple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class A
    {
      int a;
      void f();
     
      public A(..............
    }
    En définissant la fonction f à chaque fois que je crée un objet :

    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
    class myApp  
    {
       public static void main (String[] args) 
       {
             A a1 = new A(1,f1);
             A a2 = new A(2, f2);
       }
     
       f1 ()
       {
         System.out.println("Hello1");
       }
     
       f2 ()
       {
          System.out.println("Hello2");
       }
     
    }

    C'est possible ?

    Merci d'avance.

  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
    Par défaut
    Salut,

    Pourquoi ne pas utiliser une abstraction dans ton cas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public abstract class A {
      protected int a;
      public A(int a) {
          this.a=a;
      }
     
      public abstract void f();
     
    }
    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
    public class MyApp {
      public static void main(String[] args) {
    		A a1 = new A(1) {
                          public void f() {
                               f1();
                          }
                    };
    		A a2 = new A(2){
                          public void f() {
                               f2();
                          }
                    };
    	}
     
    	public static void f1() {
    		System.out.println("Hello1");
    	}
     
    	public static void f2() {
    		System.out.println("Hello2");
    	}
    }
    Sinon tu peux utiliser une interface fonctionnelle, des expressions lambda ou des références de méthodes. Une interface fonctionnelle est une interface à une seule méthode. Tu peux utiliser des interfaces standards du jdk (comme java.lang.Runnable ou java.util.function.Function, etc) ou faire ta propre interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Function {
        void run();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class A {
     
    	  private int a;
    	  private Function f;
    	  public void f() {
    	      f.run();
    	  }
     
    	  public A(int a, Function f) {
    	      this.a=a;
    	      this.f=f;
    	  }
    	}
    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
    public class MyApp {
     
     public static void main(String[] args) {
    		A a1 = new A(1, MyApp::f1);
    		A a2 = new A(2, MyApp::f2);
    	}
     
    	public static void f1() {
    		System.out.println("Hello1");
    	}
     
    	public static void f2() {
    		System.out.println("Hello2");
    	}
    }
    Avec des expressions lambda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MyApp {
    	public static void main(String[] args) {
    		A a1 = new A(1, ()-> System.out.println("Hello1"));
    		A a2 = new A(2, ()-> System.out.println("Hello2"));
    	} 
     
    }
    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
    Membre averti

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 26
    Billets dans le blog
    1
    Par défaut merci
    oui c'est exactement ce qu'il me faut
    merci pour le rappel des notions de base
    michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/09/2005, 09h19
  2. Propriétés et fonctions par défaut
    Par Arrown dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2005, 16h38
  3. [POO] fonction toUpperCase : Objet attendu
    Par LineLe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2005, 16h51
  4. creation d'une fonction par l'utilisateur
    Par michelk dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/03/2005, 09h53
  5. Réponses: 10
    Dernier message: 03/03/2005, 13h36

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