Dax*_*ado 9 java oop interface class instantiation
我曾多次听说过在实例化对象时你应该这样做:
"Interface"name = new"Class"();
例如,实现的类链表List:
List<String> name = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
LinkedList 实现了许多接口,包括queue,deque等.上面的代码和之间有什么区别
LinkedList<String> name = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
要么
Queue<String> name = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
为什么必须两次指定类型; 这似乎是多余的,但oracledocs似乎并未提及它.
LinkedList<String> name = new LinkedList<String>();在Java 7中是多余的.可以重写为LinkedList<String> name = new LinkedList<>();.
你想写类似的东西的原因:
// Java 7 way:
List<String> name = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)
如果你改变主意,将为你提供更改数据收集的自由.您的代码以这种方式更加灵活.您应该注意的是,您可以使用的方法仅限于左侧类型(List在本例中).这意味着如果使用层次结构中较高的类型(Object作为极端示例),则可能无法获得所需的所有功能.