首页 > 解决方案 > List到底是什么以及何时使用它?

问题描述

作为一名 Java 初学者,我已经阅读了几篇关于List<? extends MyType>SO 的文章和一些答案,但看不到任何解释List<? extends MyType>究竟是什么以及何时使用它?你能澄清一下这个问题吗?

标签: javagenerics

解决方案


这意味着您可以初始化您的列表,任何类型的列表都可以扩展 MyType。

这里有一个 JUnit 向您展示:

public class test {

    @Test
    public void test() {
        List<? extends Vehicle> vehicles_bike;
        List<? extends Vehicle> vehicles_car;

        vehicles_bike = completeWithBike();
        //We get the only one element, and ensure it's type is bike
        Vehicle bike = vehicles_bike.get(0);
        assertTrue(bike.getType().equals("bike"));

        //We get the only one element, and ensure it's type is car
        vehicles_car = completeWithCar();
        Vehicle car = vehicles_car.get(0);
        assertTrue(car.getType().equals("car"));
    }

    private List<? extends Vehicle> completeWithCar() {
        List<Car> cars = new ArrayList<>();
        cars.add(new Car());
        return cars;
    }

    private List<? extends Vehicle> completeWithBike() {
        List<Bike> bikes = new ArrayList<>();
        bikes.add(new Bike());
        return bikes;
    }

    class Vehicle {
        private String type;
        public Vehicle(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }
    }

    class Car extends Vehicle {
        public Car() {
            super("car");
        }
    }

    class Bike extends Vehicle {
        public Bike() {
            super("bike");
        }
    }
}

推荐阅读