Frage

Ich bin eine Login-Seite in Wicket von Java zu schreiben und möchte es als allgemein schreiben wie möglich, so muss ich in die Klasse übergeben eine Funktion, die berühmt als Funktion Zeiger in C ++. Die Klasse ist:

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);
        }
    }
}

wo beglaubigen ist die Funktion, was soll ich tun?

War es hilfreich?

Lösung

nur eine Schnittstelle übergeben, die die authenticate Methode definiert.

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

Andere Tipps

Sie können die innere Klasse verwenden

In Java gibt es nichts Aufruf Funktionszeiger eher es Funktionsobjekt ist. In diesem können Sie Objekt, deren Methoden führt Operation an den anderen Objekten definieren. z.

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

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

Dies ist nichts anderes als Funktionsobjekt. Wenn wir Code folgen Regel Schnittstelle, dann können wir eine Schnittstelle definieren und Generika als auch nutzen können.

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

Nun kann die ursprüngliche Klasse diese Schnittstelle implementieren. Das obige Beispiel ist nur eine einfache Modifikation des Komparator-Schnittstelle Beispiels. Wenn Sie keine konkrete Klasse möchten, können Sie auch anonyme Klasse verwenden.

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

Hoffe, es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top