Domanda
Sto scrivendo una pagina di login in wicket da Java e vuole scriverlo più generale possibile quindi ho bisogno di passare alla classe una funzione che famoso come puntatore funzione in C ++. La classe è:
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);
}
}
}
dove l'autenticazione è quella funzione che cosa devo fare?
Soluzione
Basta passare un'interfaccia che definisce il metodo authenticate
.
void DoSomething(IAuthenticationProvider authProvider) {
// ...
authProvider.authenticate();
}
Altri suggerimenti
È possibile utilizzare classe interna
In Java non c'è niente di puntatore a funzione di chiamata piuttosto è oggetto funzione. In questo è possibile definire oggetto i cui metodi esegue l'operazione sugli altri oggetti. per es.
class MyClass
{
public void myFunction(String s1, String s2)
{
return s1.length() - s2.length();
}
}
MyClass m = new MyClass();
m.myFunction("nnnnnn", "mmmmmmmmmmm");
Questa non è altro che oggetto funzione. Se seguiamo il codice per interfacciarsi regola allora possiamo definire un'interfaccia e in grado di utilizzare farmaci generici come bene.
public interface MyInterface<T>
{
public void myFunction(T s1, T s2);
}
Ora la classe originale può implementare questa interfaccia. L'esempio precedente è solo una semplice modifica di esempio dell'interfaccia comparatore. Se non si desidera classe concreta è possibile utilizzare classe anonima pure.
Arrays.sort(stringArray, new Comparator <String> ()
{
public int compare(String s1, String s2)
{
return s1.length() - s2.length();
}
};
);
Speranza che aiuta.