[英]Why do classes that implement an interface not count as the same type as the interface in Java?
我有
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
類型有問題?
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);
將ArrayList<ARTransaction>
的逆變類型ArrayList<ARTransaction>
為List<Transaction>
遇到困難。
試用List<? extends Transaction>
List<? extends Transaction>
因為它可能不滿足Liskov替代原則 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.