2

我正在用java在wicket中编写一个登录页面,并希望尽可能地编写它,所以我需要将一个函数传递给类,该函数在C++中被称为函数指针。课程是:

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

在哪里进行身份验证该功能我该怎么办?

4

3 回答 3

9

只需传递一个定义authenticate方法的接口。

void DoSomething(IAuthenticationProvider authProvider) {
    // ...
    authProvider.authenticate();
}
于 2009-07-22T06:30:00.750 回答
1

您可以使用内部类

于 2009-07-22T06:28:07.150 回答
0

在java中没有调用函数指针,而是函数对象。在此您可以定义对象,其方法对其他对象执行操作。例如

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

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

这不过是函数对象。如果我们遵循接口规则的代码,那么我们可以定义一个接口并且也可以使用泛型。

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

现在原来的类可以实现这个接口了。上面的例子只是对 Comparator 接口例子的简单修改。如果您不想要具体类,也可以使用匿名类。

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

希望能帮助到你。

于 2013-03-22T21:47:58.477 回答