代码之家  ›  专栏  ›  技术社区  ›  Ritwik Bose

为什么实现接口的类不像Java中的接口那样计数?

  •  4
  • Ritwik Bose  · 技术社区  · 14 年前

    我有

    out.load(output, transactions, columnHeaders, dataFormat);
    

    load 定义为:

    public boolean load(String outputfile, List<Transaction> transactions, List<String> columnHeaders, String dataFormat);
    

    String output = "";
    String dataFormat = "";
    ArrayList<ARTransaction> transactions = new ArrayList<ARTransaction>();
    List<String> columnHeaders = null;
    

    哪里

    ARTransaction implements Transaction
    

    为什么在 transactions ?

    3 回复  |  直到 13 年前
        1
  •  12
  •   Mark Peters    14 年前
    public boolean load(String outputfile, List<? extends Transaction> transactions, List<String> columnHeaders, String dataFormat);
    

    或者只是将交易声明为 List<Transaction> .

    下面是为什么你显然不能这样做的常见例子:

    List<String> list = new ArrayList<String>();
    List<Object> objList = list; //if this were possible
    objList.add(Integer.valueOf(5));
    String val = list.get(0);  //ClassCastException here
    System.out.println(val);
    
        2
  •  3
  •   Matt Mitchell    14 年前

    它很难铸造来自 ArrayList<ARTransaction> List<Transaction> .

    尝试 List<? extends Transaction> 相反

        3
  •  2
  •   duffymo    14 年前

    因为它可能不满足 Liskov substitution principle .