最近我听说过依赖注入,我很想知道是否将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;
}
答案 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");