在对象列表上使用通用列表的原因

时间:2017-02-03 15:16:13

标签: java generics abstraction

我知道在对象列表中使用通用列表的两个原因。

  1. 限制可以将哪种类型的对象插入List

    List<Object> stringObjects = Arrays.asList("a",new Integer(5));
    List<String> genericStrings = Arrays.asList("a");
    stringObjects.get(0).length();//compile error
    genericStrings.get(0).length();
    
  2. 要访问IDE中的正确方法

    {{1}}
  3. 当我把这个答案给了一个面试时,但他们对我的答案似乎并不满意。  那么在对象列表上使用通用列表还有其他原因吗?

2 个答案:

答案 0 :(得分:1)

主要有两个原因:

  1. 在编译时进行更强的类型检查。

  2. 消除演员阵容。

  3. Expected Results

答案 1 :(得分:1)

在我看来,你的想法是正确的,但没有很好的形成。

它不是关于&#34;在IDE&#34;中访问正确的方法,它是关于多态并避免显式转换。

public interface DoAble {
    void doSomething();
}

public Class FirstImpl implements DoAble {
    public void doSomething() {
        // Do something here
    }
}

public Class SecondImpl implements DoAble {
    public void doSomething() {
        // Do something here
    }
}

使用对象列表

List list = new Arrays.asList(new SecondImpl(), new FirstImple());
for (Object o : list) {
    ((DoAble) o).doSomething();
}

它有效,但它很难看。

  • 由于可以在列表中插入任何内容,因此可以随时抛出java.lang.ClassCastException
  • 我们需要做一个明确的演员表,我们应该尽力避免。

使用通用列表

List<DoAble> list = new Arrays.asList(new SecondImpl(), new FirstImple());
for (DoAble o : list) {
    o.doSomething();
}

易于使用和阅读。

  • 没有明确的演员表。
  • 我们100%表示我们的列表只包含实现DoAble的对象。