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处获得。
更多信息:
有没有办法来限制在这种情况下,ArrayList的容量以15?要求只允许15辆车被添加到列表中。谢谢 – 2014-11-23 19:14:25
@KyleT不,没有办法。你应该在要向你的List中添加元素的方法中手动执行此操作。 – 2014-11-23 19:14:58
非常好的答案,你启发了我更多的话题!谢谢。 – 2014-11-23 19:17:05