这是我的方法。我想从 Java 方法返回一个字符串集合。我想让调用代码决定是否要将此集合实现为 Vector
或 LinkedList
或 ArrayList
或其他实现 List
接口(interface)。
public List<String> findAvailableLanguages() {
Iterator<Map.Entry<String, String>> it = this.iterator();
List<String> list = new ArrayList<String>();
while (it.hasNext()) {
Map.Entry<String, String> n = it.next();
list.add(n.getKey());
}
...
但是,为了构建集合,我必须在方法内部实例化一个具体的类对象。我现在返回什么将与任何实现 List
的类兼容?
这可能吗?
最佳答案
如果您允许在填充过程中传递一个 List
而不是启动您自己的列表,这对调用者来说会更有效。它还将使代码易于进行单元测试,因为这就是所谓的依赖注入(inject)模式。
public List<String> populateWithAvailableLanguages(List<String> list) {
Iterator<Map.Entry<String, String>> it = this.iterator();
// List<String> list = new ArrayList<String>();
while (it.hasNext()) {
Map.Entry<String, String> n = it.next();
list.add(n.getKey());
}
}
现在 List
的实现可以由调用者指定:
List<String> availableLanguages = new ArrayList<>();
Localizer.populateWithAvailableLanguages(availableLanguages);
关于java - 如何从方法返回接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29574500/