Почему классы, которые реализуют интерфейс, не считаются такими же, как интерфейс в Java? - PullRequest
4 голосов
/ 12 июля 2010

у меня

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 ]

12 голосов
/ 12 июля 2010
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);
3 голосов
/ 12 июля 2010

У него возникают трудности с приведением контравариантного типа от ArrayList<ARTransaction> до List<Transaction>.

Попробуйте List<? extends Transaction> вместо

2 голосов
/ 12 июля 2010

Потому что он может не удовлетворять принципу замены Лискова .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...