Java: Невозможно вернуть переменную вне попытки? - PullRequest
0 голосов
/ 07 марта 2020

Я получаю следующую ошибку из кода ниже

ошибка:

AccountController.java:55: error: cannot find symbol
        return encoded;
               ^
  symbol:   variable encoded
  location: class AccountController
1 error

код:

public static String hash(String password) {
    try {       
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] byteOfTextToHash = password.getBytes(StandardCharsets.UTF_8);
        byte[] hashedByetArray = digest.digest(byteOfTextToHash);
        String encoded;
        encoded = Base64.getEncoder().encodeToString(hashedByetArray);

    } catch(NoSuchAlgorithmException e) {
        e.printStackTrace();
    };
    return encoded;
}

Спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 07 марта 2020

Ваша переменная encoded находится вне области видимости. Переместите это за пределы, попытайтесь исправить это как:

public static String hash(String password) {
    String encoded = null;
    try {       
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] byteOfTextToHash = password.getBytes(StandardCharsets.UTF_8);
        byte[] hashedByetArray = digest.digest(byteOfTextToHash);
        encoded = Base64.getEncoder().encodeToString(hashedByetArray);

    } catch(NoSuchAlgorithmException e) {
        e.printStackTrace();
    };
    return encoded;
}
1 голос
/ 07 марта 2020

Объявите переменную, закодированную вне, попробуйте и инициализируйте ее пустой или пустой строкой, как показано ниже

String encoded = "";
    try {
     ....
   }catch(Exception exc):\{
     ....
   }

  return encoded

;

...