java - 从 Java 中的 lambda 表达式返回 JsonArray
解决方案
您正在代码的封闭范围内使用对象。为此,您必须使JsonArray
对象保持不变。Java中的final
关键字用于声明一个常量值。因此,错误表明您必须完成(使常量)resultData
对象才能在该connection.query
范围内使用它。
因此,只需在代码的第 60 行中添加final
关键字 before :JsonArray
final JsonArray resultData = new JsonArray();
更新:
如果您不能将其声明为最终版本,则需要使用本博客中提到的解决方法。
您可以声明一个大小为 1 的 JsonArray 类型的数组,然后更改或使用数组第 0 位的值。这样,该对象将被宣布为最终对象,而不会造成任何伤害。
在第 60 行,声明final JsonArray[] resultData = { new JsonArray() };
Then,使用resultData[0]
任何你想使用值或更改值的地方resultData[0] = value;
。它还使用单个 int 数据类型值,因此不会使用额外的内存。
这是您可以使用的编辑后的代码:
@Override
public JsonArray fetchAllPages*JDBCClient dbClient) {
LOG.fo("INSIDE fetchAllPages method ");
final JsonArray[] resultData = {new JsonArray()}; //created an array of type JsonArray
dbClient.getConnection(ar->{
if(ar.failed()) {
LOG.error("Could not open a database connection",ar.cause());
} else {
SQLCollection connectionh = ar.result();
connection.query("select * from test",rs->{
if(rs.failed()) {
LOG.error("Database preparation error",rs.cause());
} else {
for(JsonArray line:rs.result().getResults()) {
System.out.println("Table result: "+line.encode());
resultData[0]=line; //replaced resultData with resultData[0]
}
connection.close(done->{
if(done.failed()) {
throw new RuntimeException(done.cause());
}
});
}
});
}
});
return resultData[0]; //replaced resultData with resultData[0]
}
推荐阅读
- apache-kafka - 如何在 Spring Cloud Stream Kafka Binder 中为死信队列应用保留时间配置?
- vba - 访问 VBA - 无法弄清楚如何在主窗体中引用我的子窗体控件
- javascript - 发生http错误401时如何将用户转发到指定路径?
- ffmpeg - FFMPEG:如何更快地拍摄 3000 张快照?
- xamarin - 有没有一种方法可以从 Grid 继承并在指定网格的内容时仍然使用 Children =?
- java - 在 AntUnit 控制台日志中显示完整的异常堆栈跟踪
- r - 如何捕获函数的环境而不是其返回值
- html - 渐变文本在 Safari 浏览器中不起作用。它显示白色而不是渐变文本
- angular - 使用 api 调用设置可观察对象的属性
- python - 字段 'id' 需要一个数字,但得到了
那里
我在 Django 中使用查询集-每当我运行服务器时,它都会出错。
我不知道这是否是我的 models.py 或 .. 的问题。我尝试在 Google 上查找这个 DeferredAttribute 对象,但我并没有真正看到任何适合我的答案