Классы как LinkedList или HashSet считаются зависимостями? - PullRequest
0 голосов
/ 15 ноября 2018

Недавно я слышал о внедрении зависимостей, и мне очень любопытно узнать, рассматривается ли такой класс, как LinkedList в Java или других собственных классах Java, как зависимость?

Допустим, ябудет иметь метод, в котором я анализирую массив строк для набора строк.

Во-первых, я делаю объект коллекции из массива - в данном случае это связанный список - и затем я преобразую его вHashSet.

Итак, оба HashSet и LinkedList рассматриваются как зависимости?

private Set<String> foo(String[] strs){
    LinkedList<String> listOfStrings = new LinkedList<String>(Arrays.asList(strs));
    Set<String> setOfStrings = new HashSet<String>();
    for(String s: listOfStrings){
        setOfStrings.add(s);
    }
    return setOfStrings;
}

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

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

static <T> Set<T> setOf(T... strs){
    return setWith(new HashSet<>(), strs);
}

// pass in the set to populate
static <T> Set<T> setWith(Set<T> set, T... strs) {
    Collections.addAll(set, strs);
    return set;
}

Вы могли бы позже сделать

// uses a sorted set
Set<String> words = setWith(new TreeSet<>(), "hello", "world");
0 голосов
/ 15 ноября 2018

Я согласен с Хелвудом -

Да, это технически зависимости, но нет, вам не нужно беспокоиться о них с точки зрения внедрения зависимостей.

Внедрение зависимостей используется для того, чтобы вы могли заменить базовый класс другим, не изменяя код в вашем методе (часто для модульного тестирования). В случае «нативных классов Java» необходимость их замены обычно не требуется, поэтому вам обычно не нужно использовать для них внедрение зависимостей.

0 голосов
/ 15 ноября 2018

В вашем примере кода HashSet и LinkedList не являются точными зависимостями, поскольку они принадлежат внутренняя реализация метода здесь.

Его можно было бы назвать DI, если бы у вас, вероятно, был метод, у которого в качестве аргумента могла бы быть коллекция, к которой вы могли бы предоставить любой тип коллекции в качестве зависимости.

public void doSomeAction(Collection<String>) { // Here, any type of Collection can be supplied by the caller, essentially making it a dependency which you can inject for example during Unit Testing..

.......// some code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...