java - 为什么实现了接口(interface)的类不能算作Java中接口(interface)的同一类型?

标签 java generics inheritance types

我有

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);

关于java - 为什么实现了接口(interface)的类不能算作Java中接口(interface)的同一类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225511/

相关文章:

java - 如何获取 MPAndroidChart 上的滚动偏移量?

java - 捕获 Junit 中抛出的异常,而不会将 Throwable block 吞没

java - 类数组,特定类的子类

java - super 和 extends 的行为方式相同

ios - Swift 不能将子类作为父类(super class)返回

java - Tomcat 过滤器生成重复的 localhost.log 行

java - 具有冗余类型参数的泛型方法

c# - 继承问题 - 从 Access 数据库文件和 SQL Express 中检索数据

javascript - Coffeescript:动态创建调用方法的类的实例

java - 是否可以在不创建实例的情况下检查一个类是否在java中扩展另一个类?