Passage de fonction en argument

Résolu
dadita Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
dadita Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

sous matlab on peut utiliser des pointeurs (ou adresses) vers une fonction pour permettre le passage de fonction en argument, ces pointeurs sont appelés des Handles
y a t'il un équivalent des handles de matlab en java?

par exemple:

ptr=@sin

transformation(ptr,0,pi/2,100)

comment faire ça en java?

Merci d'avance


A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
En Java il n'y a pas de pointeur, pour la simple et bonne raison que l'on n'accède pas directement à la mémoire de l'ordinateur car celle-ci est gérée par la machine virtuelle. La manipulation des objets se fait par référence, ces références sont parfois appelées "handle" mais je trouve que c'est un abus de langage.

Pour faire ce que tu veux en Java il faudrait faire très différemment, on appelle ça de l'introspection, c'est à dire qu'on va chercher un objet qui correspond à une classes, puis on applique des méthodes sur l'objet Class pour récupérer un objet Method qui correspond à la méthode que l'on souhaite manipuler.

Par exemple voici une simple récupération des méthodes Math.sinus et Math.cosinus auxquelles on passe en paramètre la valeur π/2 via la méthode "appel" :

import java.lang.reflect.Method;

public class essai
{
    public static void main(String[] args) throws Exception
    {
        Class<?> math = Class.forName("java.lang.Math");
        
        Method sinus = math.getMethod("sin", double.class);
        Method cosinus = math.getMethod("cos", double.class);
        
        double valeur = Math.PI/2;

        double resultat_sin = appel(sinus,valeur);
        double resultat_cos = appel(cosinus,valeur);

        System.out.println(resultat_sin); // 1.0
        System.out.println(resultat_cos); // 0.0
    }
    
    private static double appel(Method methode, double valeur) throws Exception
    {
        return (double) methode.invoke(null,valeur);
    }
}
La confiance n'exclut pas le contrôle
2
dadita Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
je vous remercie KX pour votre réponse
problème résolu :)
0