我正在尝试做这样的事情,它编译得很好:
public interface Training {
public void train();
}
public class JavaTraining implements Training{
@Override
public void train() {
// TODO Auto-generated method stub
}
}
import java.util.*;
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
List<Training> trainingList = new ArrayList<Training>();
trainingList.add(new JavaTraining());
for(Training trainingItem : trainingList){
trainingItem.train();
}
}
}
这编译得很好并且也可以运行。
但是,当我尝试更改如下所示的主要方法时,会出现编译时错误。
这是为什么?
import java.util.*;
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
List<Training> trainingList = new ArrayList<JavaTraining>();
}
}
编译时错误是:
“类型不匹配:无法从 ArrayList 转换为 List”
我什至在这里读过一篇文章。但这并不能消除我的疑问。
这个问题不是重复的,因为我没有在任何地方使用过
List<? extends Training>
但它仍然接受 JavaTraining 的对象。如何?