首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin中的Jinq -如何将lambda转换为java SerializedLambda?

Kotlin中的Jinq -如何将lambda转换为java SerializedLambda?
EN

Stack Overflow用户
提问于 2016-10-15 21:37:57
回答 2查看 667关注 0票数 1

能给我在科特林的可系列化羊肉吗?我试图使用Kotlin的Jinq库,但它需要可序列化的lambda。是否有任何语法使其成为可能?

更新:

我的代码:

代码语言:javascript
复制
var temp=anyDao.streamAll(Task::class.java)
   .where<Exception,Task> { t->t.taskStatus== TaskStatus.accepted }
   .collect(Collectors.toList<Task>());

我得到了这个错误:

代码语言:javascript
复制
Caused by: java.lang.IllegalArgumentException: 
Could not extract code from lambda. 
This error sometimes occurs because your lambda references objects that aren't Serializable.

lambda中引用的所有对象都是可序列化的(代码在java中不会导致错误)。

更新2

调试后,kotlin lambda似乎没有被翻译成java.lang.invoke.SerializedLambda,这是Jinq获取信息所必需的。因此,问题在于如何将其转换为SerializedLambda。

EN

回答 2

Stack Overflow用户

发布于 2018-07-10 17:08:39

我是金克的制造者。我还没有时间查看Kotlin支持,但根据您的描述,我假设Kotlin将其lambdas编译成实际的类或其他类。因此,Jinq可能需要一些特殊的代码来破解Kotlin lambdas,也可能需要特殊的代码来处理生成的代码中的任何不寻常的Kotlin-主义。Jinq应该能够处理它,因为以前对它进行了修改,以处理Scala。

如果您在Jinq中提交了一个有关它的问题,以及一个小的Kotlin示例(包括源文件和.class文件),那么我可以快速查看可能涉及的内容。如果是小的,我可以做那些改变。不幸的是,如果它看起来像很多工作,我不认为我真的可以有理由投入大量的资源来增加Kotlin对Jinq的支持。

票数 1
EN

Stack Overflow用户

发布于 2016-10-16 05:44:56

我对Jinq没有经验,但根据在GitHub中的实现和在Kotlin使用Java的经验。

参考文献:https://github.com/my2iu/Jinq/blob/master/api/src/org/jinq/orm/stream/JinqStream.java

您总是可以回到Kotlin中使用本机Java接口。

代码语言:javascript
复制
var temp = anyDao.streamAll(Task::class.java)
   .where( JinqStream.Where<Task,Exception> { t -> t.taskStatus == TaskStatus.accepted } )
   .collect(Collectors.toList<Task>());

 // Alternatively, You you can import the interface first
 import org.jinq.orm.stream.JinqStream.*

  ... 

  // then you can use Where instead of JinqStream.Where
  var temp = anyDao.streamAll(Task::class.java)
       .where(Where<Task,Exception> { t -> t.taskStatus == TaskStatus.accepted } )
       .collect(Collectors.toList<Task>());

或者创建一个自定义扩展来包装实现。

代码语言:javascript
复制
fun JinqStream<T>.where(f: (T) -> Boolean): JinqStream<T> {
  return this.where(JinqStream.Where<T,Exception> { f(it) })
}

免责声明:上述代码尚未测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40064479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档