将类添加到Collection时,UnsupportedOperationException

时间:2014-11-23 19:10:37

标签: java netbeans collections

我试图创建一个停车场计划,模拟汽车何时加入停车场。

我的想法是创建一个类型汽车列表,将汽车添加到固定容量列表中(15)。

一切正常,直到我突然开始得到以下异常:

  

线程中的异常" main" java.lang.UnsupportedOperationException

我很困惑为什么现在这种情况发生了,因为我没有改变任何东西,异常似乎来了又去。

我使用netbeans,在此之前我遇到了主要类在源包中未被识别的问题。

我可以在下面列出您的代码:

停车场类

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class CarPark 
{
    List<Car> spaces = Arrays.asList( new Car[15] ); //Set max size of list to be 15
    Scanner scanner = new Scanner( System.in );

    public void initialise()
    {
        CarSize  carSize  = null;
        CarValue carValue = null;

        System.out.println("Please enter the registration Number");
        String regNo = scanner.nextLine();

        System.out.println("\nNow the size of the car");
        System.out.println("0 - Small");
        System.out.println("1 - Medium");
        System.out.println("2 - Large");
        int size = scanner.nextInt();
        switch( size )
        {
            case 0: carSize = CarSize.Small;  break;
            case 1: carSize = CarSize.Medium; break;
            case 2: carSize = CarSize.Large;  break;   
        }

        System.out.println("\nFinally the value of the car");
        System.out.println("0 - Loq");
        System.out.println("1 - Medium");
        System.out.println("2 - High");
        int value = scanner.nextInt();
        switch( value )
        {
            case 0: carValue = CarValue.Low;    break;
            case 1: carValue = CarValue.Medium; break;
            case 2: carValue = CarValue.High;   break;   
        }

        addCar(regNo, carSize, carValue);
        showTotalCars();
    }

    //Adds the car to the list
    public void addCar( String regNum, CarSize size, CarValue value  )
    {
        Car car = new Car(regNum, size, value);
        spaces.add(car);
    }

    public void showTotalCars()
    {
        System.out.println("Total Cars = " + spaces.size() );
    }
}

汽车类

public class Car 
{
    String RegistrationNumber = "";
    CarSize size = null;
    CarValue value = null;

    public Car( String regNo, CarSize sizeOfCar, CarValue valOfCar )
    {
        RegistrationNumber = regNo;
        size = sizeOfCar;
        value = valOfCar;
    }

    @Override
    public String toString()
    {
        return "Registration Number = " + RegistrationNumber
                + "\nSize = " + size.name()
                + "\nValue = " + value.name();
    }
}

CarSize(枚举类)

public enum CarSize 
{
    Small(0, "For small cars"),
    Medium(1, "For medium cars"),
    Large(2, "For large cars");

    private final int Id;
    private final String description;

    CarSize( int identifier, String descr )
    {
       this.Id = identifier;
       this.description = descr;
    }

    public int getId() 
    {
        return Id;
    }

    public String getDescription() 
    {
        return description;
    }
}

CarValue(枚举类)

public enum CarValue 
{
    Low(0, "For low value cars"),
    Medium(1, "For medium value cars"),
    High(2, "For high value cars");

    private final int Id;
    private final String description;

    CarValue( int identifier, String descr )
    {
        this.Id = identifier;
        this.description = descr;
    }

    public int getId() 
    {
        return Id;
    }

    public String getDescription() 
    {
        return description;
    }
}

我在进行研究时已经阅读过,由于内存不足会导致上述包问题,我想知道这是否与我目前的问题有关?

先谢谢

1 个答案:

答案 0 :(得分:4)

问题在于:

List<Car> spaces = Arrays.asList( new Car[15] );

List返回的Array#asList实现不支持添加/删除操作。只需使用ArrayList初始化您的列表:

List<Car> spaces = new ArrayList<Car>();

如果您使用的是Java7 +

List<Car> spaces = new ArrayList<>();
  

我的想法是创建一个汽车类型列表,将汽车添加到固定容量列表中(15)。

initialise方法中添加条件,如果spaces列表包含特定大小(在本例中为15),则无法再添加任何元素。

Plain vanilla Java不提供这样的List,您可以在其中定义固定大小的元素。不过,这是由FixedSizeList类提供的,可在Commons Collections Apache Library获得。

更多信息: