2009-07-22 8 views
2

J'écris une page de connexion dans wicket par java et je veux l'écrire aussi général que possible, donc je dois passer à la classe une fonction qui célèbre comme Function Pointer en C++. La classe est:Fonction Pointer en Java

class LoginForm extends Form 
{ 

    public LoginForm(String id,TextField username,TextField password,WebResponse webResponse) 
    { 
     super(id); 
    } 

    @Override 
    public void onSubmit() 
    { 
     String password = Login.this.getPassword(); 
     String userId = Login.this.getUserId(); 
     String role = authenticate(userId, password); 
     if (role != null) 
     { 
      if (Login.this.getSave()) 
      { 
       utilities.CreateCookie("Username", userId, false, 1209600, (WebResponse) getRequestCycle().getResponse()); 
       utilities.CreateCookie("Password", password, false, 1209600, (WebResponse) getRequestCycle().getResponse()); 
      } 
      User loggedInUser = new User(userId, role); 
      WiaSession session = (WiaSession) getSession(); 
      session.setUser(loggedInUser); 
      if (!continueToOriginalDestination()) 
      { 
       setResponsePage(UserHome.class); 
      } 
     } 
     else 
     { 
      wrongUserPass.setVisible(true); 
     } 
    } 
} 

où Authentifier est cette fonction que dois-je faire?

+2

duplicata possible de [Quel est le substitut le plus proche pour un pointeur de fonction en Java?] (Http://stackoverflow.com/questions/122407/whats-the-nearest-substitute-for-a-function-pointer-in- java) – Raedwald

Répondre

9

Il suffit de passer une interface qui définit la méthode authenticate.

void DoSomething(IAuthenticationProvider authProvider) { 
    // ... 
    authProvider.authenticate(); 
} 
+0

Oui, Java utilise des interfaces à la place des pointeurs de fonction. Donc, définissez une interface qui définit la fonction que vous souhaitez appeler, puis appelez l'interface comme dans l'exemple ci-dessus. Pour implémenter l'interface, vous pouvez utiliser la classe interne anonyme si vous ne voulez pas de surcharge de fichier supplémentaire. –

1

Vous pouvez utiliser la classe interne

+0

classe interne est le nettoyage de la question ne pas le résoudre !!!! – JGC

0

En java, il n'y a rien de pointeur de fonction d'appel, c'est plutôt un objet fonction. En cela, vous pouvez définir un objet dont les méthodes fonctionnent sur les autres objets. par exemple.

class MyClass 
{ 
     public void myFunction(String s1, String s2) 
     { 
      return s1.length() - s2.length(); 
     } 
} 

MyClass m = new MyClass(); 
m.myFunction("nnnnnn", "mmmmmmmmmmm"); 

Ce n'est rien d'autre qu'un objet fonction. Si nous suivons le code de la règle d'interface, nous pouvons définir une interface et utiliser des génériques.

public interface MyInterface<T> 
{ 
     public void myFunction(T s1, T s2); 
} 

Maintenant, la classe d'origine peut implémenter cette interface. L'exemple ci-dessus est juste une simple modification de l'exemple d'interface Comparateur. Si vous ne voulez pas de classe concrète, vous pouvez également utiliser une classe anonyme.

Arrays.sort(stringArray, new Comparator <String>() 
    { 
     public int compare(String s1, String s2) 
      { 
        return s1.length() - s2.length(); 
      } 
    }; 
); 

Espérons que cela aide.

Questions connexes