Вопрос

Я пишу страницу входа в калитку с помощью Java и хочу написать ее как можно более общую, поэтому мне нужно передать классу функцию, известную как указатель функции в 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);
        }
    }
}

где аутентифицировать эту функцию, что мне делать?

Это было полезно?

Решение

Просто передайте интерфейс, который определяет authenticate метод.

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

Другие советы

Вы можете использовать внутренний класс

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

Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top