2009-07-22 80 views
2

我正在用java寫wicket的登錄頁面,並且希望儘可能將其寫入一般,所以我需要傳遞一個函數,這個函數在C++中被稱爲函數指針。 類是: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); 
     } 
    } 
} 

其中身份驗證是功能怎麼辦?

+2

[Java中函數指針最接近的替代物是什麼?]的可能重複(http://stackoverflow.com/questions/122407/whats-the-nearest-substitute-for-a-function-pointer-in- java) – Raedwald 2013-02-25 13:33:54

回答

9

只是通過其限定authenticate方法的接口。

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

是的,在Java中使用接口而不是函數指針。所以定義一個定義你想調用的函數的接口,然後像上面例子那樣調用接口。要實現這個接口,你可以使用匿名內部類,如果你不想額外的文件的開銷。 – 2009-07-22 06:42:59

1

可以使用內部類

+0

內部類正在清理不解決問題的問題! – JGC 2009-07-22 06:29:04

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

現在原來的類可以實現這個接口。上面的例子只是比較器接口示例的簡單修改。如果你不想要具體的課程,你也可以使用匿名課程。

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

希望它有幫助。