是否将LinkedList或HashSet之类的类视为依赖项?

时间:2018-11-15 13:35:05

标签: java dependency-injection dependencies

最近我听说过依赖注入,我很想知道是否将Java中的 LinkedList 之类的类或其他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 :(得分:1)

我同意凯尔伍德-

是的,从技术上讲,它们是依赖性,但是,从依赖性注入的角度来看,您不必担心它们。

使用了依赖注入,因此您可以用另一类替换基础类,而无需更改方法中的代码(通常用于单元测试)。对于“本机Java类”,通常不需要交换它们,因此您通常不需要为它们使用依赖项注入。

答案 1 :(得分:0)

在您的示例代码中,HashSet和LinkedList都不完全是依赖项,因为它们属于 该方法的内部实现。

如果您可能有一个可以将Collection作为参数的方法,那么您可以提供任何类型的Collection作为依赖项,它可以称为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
}

答案 2 :(得分:0)

如果您想提供一些依赖注入,则可以执行以下操作。

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");