来自没有解决方案的旧考试:
鉴于此代码....
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
,如果不知道其类型,它就无法执行此操作。因此,它不能是多态的。我们的代码包含许多遇到同样问题的方法。我们的目标是使我们的代码具有多态性。
- 此问题的标准解决方案的名称是什么?
- 描述一下这个例子
最佳答案
松散耦合解决该问题的方法有很多:对接口(interface)进行编程并应用 Dependency Injection
方法
g()
与LinkedList
紧密耦合,因为该方法显式实例化该对象,因此与该类紧密结合。例如,如果您想使用 ArrayList,则需要打开该类并显式修改该方法,这可能会引入错误。此外,您可能需要重新测试和记录。另一方面,方法f()
更加灵活,因为您可以只传递所需的集合,并且该方法不知道您传递的具体实现,从而保持方法的关闭。
关于java - 当并非所有函数都是多态时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409031/