Les FAQs Java :
FAQ JAVA FAQ Java EE FAQ Java ME FAQ Java XML FAQ JavaFX FAQ Java GUI FAQ Struts FAQ JSF FAQ JDBC JDO FAQ Hibernate FAQ Spring FAQ Eclipse FAQ NetBeans FAQ JCreator FAQ Maven 2

FAQ JavaConsultez toutes les FAQ

Nombre d'auteurs : 53, nombre de questions : 231, dernière mise à jour : 26 janvier 2014 

 
OuvrirSommaireGénéralitésDe C++ à Java

En Java il n'existe pas de pointeurs sur méthodes, il faut utiliser un objet là où en C/C++ vous utilisiez une fonction.

1ère étape : définiton d'une interface
On utilise des objets implémentant une interface commune. Cette interface devra définir le prototype de la fonction à exécuter.

 
Sélectionnez
public interface IFonctionpublic void execute(int);

2ème étape : définition de classes implémentant l'interface
Ces classes définissent différentes implémentations de la fonction.

 
Sélectionnez

public class Fonction implements IFonction {
        public void execute(int arg) {
                /** Faire ce que l'on aurait fait dans la fonction
                 * en C/C++
                 */
        } 
} 

3ème étape : passage de paramètres et exécution
Il ne reste plus qu'à définir une fonction qui prend en paramètre une instance du type de l'interface et de faire appel à la méthode définie dans cette interface.

 
Sélectionnez

public void fonction(IFonction uneFonction) {
        uneFonction.execute(unint);
} 

Un bel exemple d'une telle méthodologie est le système de callback de AWT: au lieu de passer des fonctions comme en C/C++, on passe des instances de classes appelées Listener.

Une alternative intéressante est offerte par Jakarta Comons : l'API Functor. Un functor est une fonction qui peut être manipulée comme un objet, ou un objet repésentant une fonction. Cette API définit trois types de functors : les prédicats (retournent un booléen), les fonctions (retournent un Object) et les procédures (qui ne retournent rien).

Mis à jour le 3 avril 2005  par Clément Cunin

NON.
Cela fait partie des spécifications du langage. Les concepteurs de Java n'ont pas souhaité intégrer cette fonctionnalité car le code qui découle de telles pratiques est beaucoup plus difficile à lire et à comprendre.

Créé le 28 mars 2002  par Clément Cunin

L'héritage multiple n'est pas possible en Java. C'est l'une des propriétés fondamentales du langage, et c'est un point qui le différencie de beaucoup d'autres langages objets. Ce choix a été fait pour éviter que les nombreux problèmes lié à l'héritage en 'diamant' (une classe qui hérite de 2 parents qui héritent d'une classe commune !) ne se pose en Java.

Oui, mais comment faire alors ?
Afin de contourner le problème, Java introduit la notion d'interface. Une interface est une classe privée de toute implémentation. Il devient alors possible de dériver d'une classe et d'en implémenter plusieurs autres. Cette solution permet de contourner très élégamment les problèmes liés à l'héritage multiple.

Créé le 28 mars 2002  par Clément Cunin

Non, pas pour l'instant. Cependant Sun étudie, dans le cadre d'un processus communautaire ( community process ), l'intégration d'un mécanisme de généricité à Java.

Les templates seront ajoutés à Java dans sa version 1.5, pour plus d'info http://docs.oracle.com/javase/tutorial/extra/generics/index.html

Mis à jour le 1er mars 2003  par L'équipe Java

Lien : [Java 5.0] Qu'est-ce que les Generics (types paramétrés) ?
Lien : Java 5.0 et les types paramétrés
Lien : Présentation de Tiger : Les Générics
Lien : http://docs.oracle.com/javase/tutorial/extra/generics/index.html

Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs : - Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement : "Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement". - Pour ce qui est des autres contributions : Copyright © 2014 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peut en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.