簡體   English   中英

為什么實現接口的類不算與Java中的接口類型相同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM