java - 如何从方法返回接口(interface)

标签 java methods interface return-type

这是我的方法。我想从 Java 方法返回一个字符串集合。我想让调用代码决定是否要将此集合实现为 VectorLinkedListArrayList 或其他实现 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/

相关文章:

function - Julia 模块调用用户定义函数

cocoa - 在 Cocoa 中,将私有(private) API 放在 .m 文件中,将公共(public) API 放在 .h 文件中,这是一个好习惯吗?

java - 当有接口(interface)参数时是否可以自动选择适当的类方法?

java - Jackson 展开/包裹对象

java - 启动一个 Activity 会停止 Android 服务

methods - Go中的参数传递

java - Set 作为抽象数据类型和作为接口(interface)有什么区别?

java - 正则表达式如何获取子字符串?

java - Jython GUI 的问题

c# - RichTextBox的C#滚动