Сохранить ссылку на один SecureRandom в Java? - PullRequest
0 голосов
/ 04 марта 2010

Исходя из мира C ++ здесь, таким образом, природа вопроса ...

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

Итак,

public class MyClass {
    private SecureRandom random;
    public MyClass(SecureRandom _random) { random = _random };
... }

Приводит ли это к ссылке на тот же генератор или к его копии? Проблема с копией состоит в том, что создание нескольких объектов MyClass один за другим приведет к одинаковым последовательностям, если SecureRandom является псевдослучайным, например, SHA1PRNG. Мне нужно, чтобы они разделяли один, чтобы последовательности вызовов random.nextBytes (...) давали разные результаты в каждом экземпляре MyClass.

(Кстати, гарантированно, что SHA1PRNG будет заполняться по-разному каждый раз, когда в главном приложении создается новый экземпляр SecureRandom, и, надеюсь, более безопасным способом, чем время?)

Ответы [ 2 ]

3 голосов
/ 04 марта 2010

В Java все, что не является примитивным типом (булево, char, byte, short, int, long, float, double), является ссылочным типом. Единственный способ скопировать ссылочный тип - это сделать это явно через клонирование, сериализацию, конструирование копирования и т. Д. Вы не используете clone () или тому подобное и не используете конструктор. Вы просто делаете задание. Это означает, что вы копируете ссылку.

1 голос
/ 04 марта 2010

Тот же. random и _random являются ссылочными переменными, указывающими на один и тот же объект.

...