我正在使用DB
代码从ff
检索一些数据:
List<modelA> list= new ArrayList<modelA>();
list = modelA.getList(parameter);
这是检索到的内容:
list[1] = "var1"
list[2] = "var2"
list[3] = "var3"
list.size() = 3
和list[0]
不存在。
我将列表转移到LinkedHashSet以将索引设置为正确,但它不起作用。清单仍然相同。
Set<modelA> hs = new LinkedHashSet<>();
hs.addAll(list);
list.clear();
list.addAll(hs);
有没有办法修复索引,使其从0开始而不是1?
运行list.get(0)
java.lang.NullPointerException
at applicationmodels.f08.pv.F08PV008Model.search(F08PV008Model.java:221)
at controllers.f08.pv.F08PV008.control(F08PV008.java:148)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$99$$anonfun$apply$99.apply(routes_routing.scala:1510)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$99$$anonfun$apply$99.apply(routes_routing.scala:1510)
at play.core.Router$HandlerInvoker$$anon$7$$anon$2.invocation(Router.scala:183)
at play.core.Router$Routes$$anon$1.invocation(Router.scala:377)
at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:56)
at play.db.jpa.TransactionalAction$1.apply(TransactionalAction.java:20)
at play.db.jpa.TransactionalAction$1.apply(TransactionalAction.java:18)
at play.db.jpa.JPA.withTransactionAsync(JPA.java:177)
at play.db.jpa.TransactionalAction.call(TransactionalAction.java:15)
at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:91)
at play.core.j.JavaAction$$anon$3.apply(JavaAction.scala:90)
at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
at play.core.j.FPromiseHelper$$anonfun$flatMap$1.apply(FPromiseHelper.scala:82)
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:37)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
答案 0 :(得分:0)
list = modelA.getList(parameter);
来自modelA类的方法getList返回一个构建列表。它建立列表的方式可以是任何东西。它甚至可以在第99位开始。
因此,您需要检查/修复对象在modelA类的列表中的放置方式。
答案 1 :(得分:0)
似乎getList
方法返回违反API的List
实现(假设List是java.util.List)。 List.get()的api指定如果index == list.size()
,所有List实现都应抛出IndexOutOfBoundsException。
您可以创建一个您选择的某种特定类型的列表(例如ArrayList),并将破碎列表的内容放在您创建的列表中:
List<modelA> list= new ArrayList<modelA>(modelA.getList(parameter));
然后你应该得到一个大小为3的列表,其中使用了从零开始的索引。
或者,您可以检查损坏的List实现的类型:
System.out.println(modelA.getList(parameter).getClass().getName());
并尝试修复损坏的List类的实现。但是,如果其他地方的代码依赖于此List实现的基于1的索引,那么这可能会有风险。