java - 当并非所有函数都是多态时

标签 java

来自没有解决方案的旧考试:

鉴于此代码....

import java.util.*;

public class AClass {
    private int f(List<Integer> list){
        int i = 0;
        //Something useful
        return i;
    }
    public int g() {
        List<Integer> myList = new LinkedList<Integer>();
        return f(myList);
    }   
}

请注意该方法f是多态的,即它可以传递接口(interface) List 的任何实现。另一方面,方法g不是。当它构造对象时 myList ,如果不知道其类型,它就无法执行此操作。因此,它不能是多态的。我们的代码包含许多遇到同样问题的方法。我们的目标是使我们的代码具有多态性。

  1. 此问题的标准解决方案的名称是什么?
  2. 描述一下这个例子

最佳答案

  1. 松散耦合解决该问题的方法有很多:对接口(interface)进行编程并应用 Dependency Injection

  2. 方法g()LinkedList 紧密耦合,因为该方法显式实例化该对象,因此与该类紧密结合。例如,如果您想使用 ArrayList,则需要打开该类并显式修改该方法,这可能会引入错误。此外,您可能需要重新测试和记录。另一方面,方法 f() 更加灵活,因为您可以只传递所需的集合,并且该方法不知道您传递的具体实现,从而保持方法的关闭。

关于java - 当并非所有函数都是多态时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409031/

相关文章:

java - Java 7 的 Powermock 问题

java - 使用 EditText 编辑 RecyclerView 中的重复项目

Java枚举继承

java - 通用函数作为函数式接口(interface)?

java - Log4j 与 Logback : concurrent writing to same log?

java - 更改双变量中的随机值?

java - 如何列出源代码中使用的 Android SDK 中的所有类和方法?

java - Hibernate 内连接 ManyToOne

java - 如何复制数组维度

java - PDPageContentStream.AppendMode 无法解析