相关疑难解决方法(0)

Java Generics WildCard问题:列表<?扩展A>

假设我有这些课程:车辆,汽车和太空飞船:

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

java generics wildcard

17
推荐指数
3
解决办法
1万
查看次数

集<?扩展T> vs Collection <T>

在尝试理解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> …

java syntax extends

11
推荐指数
3
解决办法
9738
查看次数

标签 统计

java ×2

extends ×1

generics ×1

syntax ×1

wildcard ×1