UnsupportedOperationException将类添加到集合

问题描述:

我试图创建一个停车场程序,模拟何时将汽车添加到停车场。UnsupportedOperationException将类添加到集合

我的想法是创建一个类型的汽车列表,将汽车添加到固定容量列表(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; 
    } 
} 

而进行研究,如果是我目前的问题联系在一起包问题,如上面提到的可能是由于内存不足,我不知道我已阅读?

由于提前

的问题是在这里:

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

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

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

+

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

我的想法是创建一个类型的车的一个列表,它增加了车内的固定capactiy列表(15)。

initialise方法如果spaces列表包含特定大小(在此情况下,15),那么它会是不可能的添加更多的元件,其中添加的条件。

普通香草Java不提供这样的List您可以在其中定义固定大小的元素。但是,这是由FixedSizeList课程提供的,该课程可在Commons Collections Apache Library处获得。

更多信息:

+0

有没有办法来限制在这种情况下,ArrayList的容量以15?要求只允许15辆车被添加到列表中。谢谢 – 2014-11-23 19:14:25

+0

@KyleT不,没有办法。你应该在要向你的List中添加元素的方法中手动执行此操作。 – 2014-11-23 19:14:58

+0

非常好的答案,你启发了我更多的话题!谢谢。 – 2014-11-23 19:17:05