Самый удобный способ передачи двух переменных в Java? - PullRequest
3 голосов
/ 21 июня 2011

Я пишу библиотеку, которая содержит некоторые хэш-функции.

Я хочу, чтобы одна из функций возвращала хеш (byte []) и случайную соль (byte []), сгенерированную для использования с хешем. Какой самый удобный и интуитивно понятный способ сделать это?

У меня есть версия C #, которая работает, возвращая хеш, а затем возвращая соль как выходной параметр, который отлично работает, однако Java не дает мне роскоши выходных параметров.

Есть мысли?

Ответы [ 4 ]

8 голосов
/ 21 июня 2011

Самый элегантный способ - это, конечно, инкапсулировать хеш и соль в классе и вернуть экземпляр этого класса.

class HashAndSalt {
    private byte[] hash, salt;
    public HashAndSalt(byte[] hash, byte[] salt) {
        this.hash = hash;
        this.salt = salt;
    }

    // access methods goes here
}

Основная причина выбора вышеуказанного подхода заключается в том, что на стороне клиента становится ясно, что содержат переменные. Если вы вернете что-то вроде byte[2][], я бы по-прежнему забывал, был ли хэш в индексе 0 или 1.

Если вы сделаете поля окончательными, некоторые, возможно, даже возразят, что вы можете сделать их открытыми и пропустить методы доступа.

1 голос
/ 21 июня 2011

Если вы используете Project Lombok, вы можете использовать аннотацию @Data для создания класса значений, который инкапсулирует hash + salt, и Lombok-ifier автоматически сгенерирует шаблонный код.

Use final переменных, чтобы сделать неизменный класс, и вы избавите себя от горя.

0 голосов
/ 21 июня 2011

Вы должны будете создать Объект, который имел бы хэш-байт [] и солт-байт [] в качестве двух переменных экземпляра.

Что-то вроде:

public class HashParams {
  public byte hash[];
  public byte salt[];
}
0 голосов
/ 21 июня 2011

Простой способ сделать это - небольшая структура, которая содержит хеш и соль в структуре.

...