假设我有这些课程:车辆,汽车和太空飞船:
class Vehicle{
void rideVehicle(Vehicle v){
System.out.println("I am riding a vehicle!");
}
}
class Car extends Vehicle{
void rideVehicle(Vehicle c){
System.out.println("I am riding a car!");
}
}
class SpaceShip extends Vehicle{
void rideVehicle(Vehicle c){
System.out.println("I am riding a spaceship!");
}
}
Run Code Online (Sandbox Code Playgroud)
我写这个方法addCars:
private static void addCars(List<? extends Vehicle> vcls){
vcls.add(new Car());
vcls.add(new Car());
vcls.add(new Car());
}
Run Code Online (Sandbox Code Playgroud)
为什么我会得到编译时错误?我知道List是扩展Vehicle的任何X的List的超类型.对?
谢谢
编辑:我得到的错误(编译时):类型List中的方法add(捕获#2-of?extends Vehicle)不适用于参数(Car).
在尝试理解Spring MVC中的概念之后,我遇到了Collection<? extends Book>我以前从未见过的表达式.我试图自己搞清楚,但我发现使用Collection<? extends Book>和没有区别Collection<Book>.我猜它只允许Book的扩展,但它确实允许Book.抓那个.我曾尝试使用谷歌,但从那以后?是google中的通配符,它几乎不可能搜索.我已经搜索了stackoverflow以获得答案,但所有关于此问题的问题(例如List <?extends MyType>和<?extends> Java语法)已经知道了Collection<? extends T>.这段代码最初引起了我的兴趣:
import java.util.ArrayList;
import java.util.Collection;
public class Book {
public static void main(String[] args) {
BookCase bookCase1 = new BookCase();
BookCase bookCase2 = new BookCase(bookCase1);
}
}
class BookCase extends ArrayList<Book> {
public BookCase() {
}
//acts same as public BookCase(Collection<Book> c) {
public BookCase(Collection<? extends Book> c) {
super(c);
}
}
Run Code Online (Sandbox Code Playgroud)
怎么<? extends T> …