2010-07-12 61 views
4

爲什麼實現接口的類不是與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的類型有問題?

回答

12
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); 
+0

剛打好我的好作品 – 2010-07-12 02:34:10

+0

啊。這解決了這個問題。對你們兩個來說。你的意思是如果我想在'load'方法中將'BRTransaction t'添加到'transactions'中。 這是有道理的:-p – 2010-07-12 02:39:53

+0

這是否意味着Java會認爲事務的類型爲List in'load'? – 2010-07-12 02:41:12

3

是具有鑄造逆變類型是ArrayList<ARTransaction>List<Transaction>困難。

嘗試List<? extends Transaction>代替

相關問題