我已经看过几次提到这个,我不清楚这是什么意思.你何时以及为何会这样做?
我知道接口有什么作用,但事实上我不清楚这一点让我觉得我错过了正确使用它们.
如果你这样做是这样的:
IInterface classRef = new ObjectWhatever()
Run Code Online (Sandbox Code Playgroud)
你可以使用任何实现的类IInterface吗?你什么时候需要这样做?我唯一能想到的是,如果你有一个方法,你不确定除了实现之外将传递什么对象IInterface.我想不出你需要多久做一次.
另外,你怎么能写一个接受实现接口的对象的方法?那可能吗?
(1) List<?> myList = new ArrayList<?>();
(2) ArrayList<?> myList = new ArrayList<?>();
Run Code Online (Sandbox Code Playgroud)
我理解,使用(1),可以交换List接口的实现.似乎(1)通常在应用程序中使用而不管需要(我自己总是使用它).
我想知道是否有人使用(2)?
此外,经常(并且我可以得到一个例子)情况实际上需要使用(1)over(2)(即where(2)不足以对接口和最佳实践等进行编码)
PMD将报告违规行为:
ArrayList<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
违规是"避免使用像'ArrayList'这样的实现类型;而是使用接口".
以下行将更正违规行为:
List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
为什么要使用后者List而不是ArrayList?
我一直听到大多数与节目相关的网站上的声明:
编程到接口而不是实现
但是我不明白其含义?
例子会有所帮助.
编辑:我收到了很多好的答案,所以你可以用一些代码片段来补充它,以便更好地理解这个主题.谢谢!