Переопределение метода Java-класса в Nashorn JavaScript - PullRequest
0 голосов
/ 14 февраля 2019

Следующий метод Java создает аутентификатор пароля JavaMail с фиксированными именем пользователя и паролем:

public static Authenticator createJavamailPasswordAuthenticator(String username,String password) {
    final String usernameTmp = username;
    final String passwordTmp = password;
    return new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(usernameTmp,passwordTmp);
        }
    };
}

Мне нужно написать функцию Nashorn JavaScript , которая точно выполняетто же самое, но я не знаю, как переопределить метод getPasswordAuthentication от Authenticator.Будучи зеленым рогом Nashorn, я попробовал следующее

function createJavamailPasswordAuthenticator(username,password){
    var authenticator=new javax.mail.Authenticator();
    authenticator.getPasswordAuthentication=function(){
        return new javax.mail.PasswordAuthentication(username,password);
    }
    return authenticator;
}

... но это не сработало.

Кто-нибудь знает решение этой проблемы?

1 Ответ

0 голосов
/ 14 февраля 2019

Это здесь:

return new Authenticator() {

создает анонимный внутренний класс!Другими словами: вы создаете новый класс неявным образом и создаете экземпляр объекта этого класса.Ваш новый класс расширяет класс, от которого он происходит, поэтому вы можете переопределить методы в {блоке}.

Простым решением было бы сделать это явным : создать "настоящую" Javaкласс, который принимает имя пользователя, passsword в качестве параметров конструктора и использует их так же, как в первом примере.Затем просто используйте код java-сценария для создания экземпляра этого класса и передайте необходимые аргументы.

Не имитируйте детали реализации, вместо этого сосредоточьтесь на том, что необходимо сделать (создавая объекткласс, имеющий определенное поведение)!

...