“线程中的异常”;“主要”;java.lang.UnsupportedOperationException
我正在尝试使用Java中的本机查询获取车辆的有序列表 我使用两种方法,第一种是获取车辆,第二种是订购列表 我得到这个错误:“线程中的异常”;“主要”;java.lang.UnsupportedOperationException,java,db4o,nativequery,Java,Db4o,Nativequery,我正在尝试使用Java中的本机查询获取车辆的有序列表 我使用两种方法,第一种是获取车辆,第二种是订购列表 我得到这个错误: Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.set(AbstractList.java:132) at java.util.AbstractList$ListItr.set(AbstractList.java:426)
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.set(AbstractList.java:132)
at java.util.AbstractList$ListItr.set(AbstractList.java:426)
at java.util.Collections.sort(Collections.java:159)
at Exercici4.AzizElamraniOrdreMatricula(Exercici4.java:246)
at Exercici4.main(Exercici4.java:45)
这是我的密码:
private static final String BBDDFITXER = "fitxer";
public static void main(String[] args)
{
new File(BBDDFITXER).delete();
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), BBDDFITXER);
try {
Cotxe c3 = new Cotxe("B1432-hk", 10000, true);
Cotxe c1 = new Cotxe("B54w2-hk", 566666, true);
Cotxe c2 = new Cotxe("Bwc345-ABC", 13456, true);
Cotxe c4 = new Cotxe("Ba432th", 10000, true);
Moto m1 = new Moto("B5756474", 1000, 500);
Moto m2 = new Moto("6575-YT", 2345454, 250);
db.store(c3);
db.store(c1);
db.store(c2);
db.store(c4);
db.store(m1);
db.store(m2);
List<Vehicle> vehicles = AzizElamraniOrdreMatricula(db);
consultaVehicles(vehicles);
}finally{
db.close();
}
}
public static List<Vehicle> AzizElamraniNQ3(ObjectContainer db)
{
List<Vehicle> vehicles = db.query(new Predicate<Vehicle>()
{
public boolean match(Vehicle vehicle) {
return vehicle.getKm() < 50000
&& vehicle.getMatricula().startsWith("B");
}
});
return vehicles;
}
public static void consultaVehicles(List<Vehicle> vehicles) {
System.out.println("total: " + vehicles.size());
for (Vehicle v : vehicles) {
System.out.println(v.infoVehicle());
}
}
public static List<Vehicle> AzizElamraniOrdreMatricula(ObjectContainer db) {
List<Vehicle> vehiclesdes = AzizElamraniNQ3(db);
Collections.sort(vehiclesdes);
return vehiclesdes;
}
private静态最终字符串BBDDFITXER=“fitxer”;
公共静态void main(字符串[]args)
{
新文件(BBDDFITXER.delete();
ObjectContainer db=Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(),BBDDFITXER);
试一试{
Cotxe c3=新Cotxe(“B1432 hk”,10000,真);
Cotxe c1=新Cotxe(“B54w2 hk”,566666,真);
Cotxe c2=新Cotxe(“Bwc345 ABC”,13456,真);
Cotxe c4=新的Cotxe(“BA432”,10000,真);
Moto m1=新Moto(“B5756474”,1000500);
Moto m2=新Moto(“6575-YT”,2345454250);
数据库存储(c3);
数据库存储(c1);
数据库存储(c2);
数据库存储(c4);
db.存储(m1);
db.仓库(m2);
列表车辆=AzizElamraniOrdreMatricula(db);
咨询车辆(车辆);
}最后{
db.close();
}
}
公共静态列表AzizElamraniNQ3(ObjectContainer数据库)
{
List vehicles=db.query(新谓词()
{
公共布尔匹配(车辆){
返回车辆。getKm()<50000
&&vehicle.getMatricula().startsWith(“B”);
}
});
返回车辆;
}
公共车辆(列出车辆){
System.out.println(“总计:+vehicles.size());
用于(车辆v:车辆){
System.out.println(v.infoVehicle());
}
}
公共静态列表AzizElamraniOrdreMatricula(ObjectContainer db){
列出车辆DES=AzizElamraniNQ3(db);
收集.分类(车辆DES);
返回车辆DES;
}
我做错了什么?您从
db.query
获得的列表不是可修改的列表,而集合。sort
修改列表以使其排序。要解决这个问题,您可以创建一个新列表并对其进行排序。您的方法AzizElamraniOrdreMatricula
将如下所示:
public static List<Vehicle> AzizElamraniOrdreMatricula(ObjectContainer db) {
List<Vehicle> vehiclesdes = new ArrayList<Vehicle>(AzizElamraniNQ3(db));
Collections.sort(vehiclesdes);
return vehiclesdes;
}
公共静态列表AzizElamraniOrdreMatricula(ObjectContainer db){
列表车辆DES=新阵列列表(AzizElamraniNQ3(db));
收集.分类(车辆DES);
返回车辆DES;
}
是,这是正确的db。query
正在返回固定列表。请参见下面的示例,它将抛出java.lang.UnsupportedOperationException:
public class UnsupportedExceptionDemo {
public static void main(String[] args) {
String[] valStrings = { "Java", "Unsupported", "Test" };
List<String> list = Arrays.asList(valStrings);
for (Iterator<String> iterator = list.iterator();
iterator.hasNext();) {
String string = iterator.next();
iterator.remove();
}
}
}
公共类不支持DeceptionDemo{
公共静态void main(字符串[]args){
字符串[]valStrings={“Java”,“Unsupported”,“Test”};
List=Arrays.asList(valStrings);
for(Iterator Iterator=list.Iterator();
迭代器.hasNext();){
String字符串=迭代器.next();
iterator.remove();
}
}
}
原因:当调用Arrays.asList(String…a)方法时,它返回由指定数组支持的固定大小列表,因此当您尝试修改列表(即添加或删除列表中的值)时,将抛出UnsupportedOperationException。要解决此问题,请使用LinkedList发布stacktrace。并尝试格式化代码/问题。欢迎使用。请阅读和,以获取撰写好问题的提示。您忽略了最重要的细节,即引发异常的语句的完整stacktrace和标识。除非你提供这些信息,否则没有人能帮上忙。我打赌这与
集合有关。排序和你的数据库,但是。。。更多细节!很抱歉我编辑了这个问题!非常感谢。