java - 将类添加到 Collection 时出现 UnsupportedOperationException

标签 java netbeans collections

我正在尝试创建一个 parking 场程序来模拟何时将汽车添加到 parking 场。

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

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

Exception in thread "main" java.lang.UnsupportedOperationException

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

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

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

parking 场类

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;
    }
}

我在进行研究时了解到,由于内存不足,可能会出现上述包问题,我想知道这是否与我当前的问题有关?

提前致谢

最佳答案

问题出在这里:

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

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

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

如果你使用的是 Java7+

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

My idea is to create a list of type car which adds the car to a list of fixed capactiy (15).

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

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

更多信息:

关于java - 将类添加到 Collection 时出现 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27093104/

相关文章:

java 应用程序 : html pages encoding issue

java - 在 Netbeans 中构建 Maven 项目时出现错误?

java - NetBeans - 每次我必须调试时都必须清理构建

collections - 为什么要使用 Collection.allow 而不是 Meteor.methods 和 Meteor.call 这些方法?

java - hql 通过集合查找实体

java - 如何在 Eclipse 编辑器中获取所有打开文件的列表?

java - 超出 GC 开销限制

java - Leetcode 子数组最小值之和通过 86/87 测试。可能是我的模计算有问题

Netbeans 6.1 中的 Java bean 事件

java - 使用迭代器迭代集合是否比普通迭代更高效