lambda 序列化_Lambda,会序列化吗?

lambda 序列化

因此,我一直在思考Tyrus项目所需的增强功能,该功能允许用户广播到跨机器集群连接到URL的客户端子集。 有多种方法可以做到这一点。 但是自从我使用JDK 8以来,这个问题肯定看起来像钉子。


为此,我创建了一个简单的单元测试类,该类将使用过滤器,将其序列化到磁盘,读回然后执行。 它有一个实例字段“ VALUE”,我们可以使用它直接或间接引用以找出导致序列化失败的原因。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;import java.util.function.Predicate;import org.junit.Test;public class SerializablePredicateFilterTest {public String VALUE = "Bob";public interface SerializablePredicate<T> extends Predicate<T>, Serializable {}public <T> void filter(SerializablePredicate<T> sp, T value) throws IOException, ClassNotFoundException {sp.getClass().isLocalClass();File tempFile = File.createTempFile("labmda", "set");try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(tempFile))) {oo.writeObject(sp);}try (ObjectInput oi = new ObjectInputStream(new FileInputStream(tempFile))) {SerializablePredicate<T> p = (SerializablePredicate<T>) oi.readObject();System.out.println(p.test(value));}}}

因此,为了进行校准,请确保匿名内部类将失败,因为它始终包含对封闭对象的引用……。

@Test(expected = NotSerializableException.class)public void testAnonymousDirect() throws IOException, ClassNotFoundException {String value = VALUE;filter(new SerializablePredicate<String>() {@Overridepublic boolean test(String t) {return value.length() > t.length();}}, "Bob");}

本地类也是如此,您不使用本地类吗?

@Test(expected = NotSerializableException.class)public void testLocalClass() throws IOException, ClassNotFoundException {class LocalPredicate implements SerializablePredicate<String> {@Overridepublic boolean test(String t) {// TODO Implement this methodreturn false;}}filter(new LocalPredicate(), "Bobby");}

因此,当然可以使用独立的类,在这种情况下,为方便起见,可以使用嵌套类。

public static class LengthPredicate implements SerializablePredicate<String> {private String value;public LengthPredicate(String value) {super();this.value = value;}public void setValue(String value) {this.value = value;}public String getValue() {return value;}@Overridepublic boolean test(String t) {// TODO Implement this methodreturn false;}}@Testpublic void testStaticInnerClass() throws IOException, ClassNotFoundException {filter(new LengthPredicate(VALUE), "Bobby");}

因此,让我们开始使用JDK 8,事实证明,我的第一次尝试也失败了,但是它确实确认序列化对于使用Lambda非常满意。

@Test(expected = NotSerializableException.class)public void testLambdaDirect() throws IOException, ClassNotFoundException {filter((String s) -> VALUE.length() > s.length(), "Bobby");}

稍作修改即可将值复制到有效的最终属性中,现在可以lambda进行序列化并正确检索。

@Testpublic void testLambdaInDirect() throws IOException, ClassNotFoundException {String value = VALUE;filter((String s) -> value.length() > s.length(), "Bobby");}

当然,如果该值是一个简单的方法参数,它也可以正常工作。

@Testpublic void testLambdaParameter() throws IOException, ClassNotFoundException {invokeWithParameter(VALUE);}private void invokeWithParameter(String value) throws java.lang.ClassNotFoundException, java.io.IOException {filter((String s) -> value.length() > s.length(), "Bobby");}

因此答案是肯定的,如果您稍加小心,就可以将其序列化。

参考: Lambda,会序列化吗? 来自我们的JCG合作伙伴 Gerard Davison,来自Gerard Davison的博客博客。

翻译自: https://www.javacodegeeks.com/2013/12/lambda-will-it-serialize.html

lambda 序列化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学164205 ERP原理及应用 作业(专升本)

ERP原理及应用&#xff08;专升本&#xff09; 单项选择题 企业信息化综合运用了现代制造技术、&#xff08; &#xff09;、自动化技术、管理技术&#xff0c;将企业各项活动中的人、技术和经营管理&#xff0c;以及信息流、物料流和左流有机集成&#xff0c;实现企业整体优化…

LaTeX双栏模板插入通栏公式(跨栏插图)

1. 利用带星号的浮动体环境 带星号的浮动体figure和table环境可以在双栏模板中使用&#xff0c;例如我们以IEEEtran为例&#xff0c;插入通栏公式 \documentclass{IEEEtran} \usepackage{amsmath&#xff0c;lipsum} \begin{document} \lipsum[1] \begin{figure*} \begin{ali…

JDK 12新闻(2018年9月13日)

随着通用性的JDK 11计划在本月底&#xff08;2018 9月25日&#xff09;&#xff0c;这是一个好时机&#xff0c;开始在更紧密地看着JDK 12 。 在OpenJDK jdk-dev邮件列表上的标题为“ JDK 12的计划时间表 ”的消息中 &#xff0c; Mark Reinhold宣布&#xff1a;“随着JDK 11即…

【渝粤题库】陕西师范大学165211创新管理 作业(专升本)

一、单选题 1.约瑟夫•熊彼特在1912年出版的《&#xff08; &#xff09;》一书中最早提出“创新”一词。 A经济发展理论 B经济分析史 C资本主义、社会主义与民主 D景气循环论 2.约瑟夫•熊彼特的创新理论中&#xff0c;认为创新的主体是&#xff08; &#xff09;。 A企业 B市…

[渝粤题库]西北工业大学中国古代法制史

中国古代法制史 1. 明清时期的主审机关是&#xff08; &#xff09;。 A.刑部 B.大理寺 C.都察院 2. 唐朝编订的&#xff08; &#xff09;&#xff0c;成为后世《宋刑统》的体例渊源。 A.《唐六典》 B.《永徽律疏》 C.《大中刑律统类》 3. 《宋刑统》在内容上沿袭&am…

renew process 更新过程

一个泊松过程可以分解成一系列 i.i.di.i.di.i.d 的指数分布随机变量相加&#xff0c;如果把指数分布换成其他 i.i.di.i.di.i.d 的分布就得到了更新过程。 更新过程本身是泊松过程的一种扩长&#xff0c;同时更新过程也可以发展出一套更新理论&#xff0c;包括更新方程等。 htt…

[渝粤题库]西北工业大学刑法

刑法 一单选题 1.我国刑法的任务是用刑罚同( ) 行为作斗争。 A.危害国家安全犯罪 B.破坏社会主义经济秩序犯罪 C.其他刑事犯罪 D.一切犯罪 2.我国刑法对空间效力的规定&#xff0c;采取的是( )。 A.属地原则 B.属人原则 C.保护原则 D.以属地原则为主&#xff0c;兼采属人原则、…

离散时间信号,连续时间信号,模拟信号,数字信号区别

连续时间信号 &#xff1a; 在时间t 上是连续的值 时间连续&#xff0c; 幅值连续。 定义为模拟信号。时间连续&#xff0c; 幅值离散。 比如脉冲信号。 离散时间信号 &#xff1a; 在时间t上 是离散的值 时间离散&#xff0c; 幅值连续。 &#xff08;在任意两个离散时间点…

[渝粤题库]西北工业大学复变函数与积分变换

复变函数与积分变换 窗体顶端 1. 下列关于幂级数的叙述,不正确的是&#xff08; &#xff09;。 A.在收敛圆内,幂级数绝对收敛 B.在收敛圆外,幂级数发散 C.在收敛圆周上,可能收敛,也可能发散 D.在收敛圆周上,条件收敛 2. 函数在处的导数( ) A.等于0 B.等于1 C.等于-…

java8 javafx_Java8中的外观(JavaFX8)

java8 javafxJavaFX8在外观方面进行了一些更改 &#xff0c;其中最相关的是新CSS API &#xff0c;它允许您为控件以及已公开的Skin类创建新CSS属性和伪类。 使用CSS可以更改控件的很多外观&#xff0c;但是CSS可以实现很多功能&#xff0c;这就是Skin类的用处。从“ UI控件体…

[渝粤题库]西北工业大学材料力学(更新)

材料力学 置于刚性平面上的短粗圆柱体&#xff0c;在上端面中心处受到一刚性圆柱压头的作用&#xff0c;如图所示&#xff0c;若已知压头和圆柱的横截面面积分别为&#xff0c;圆柱的许用压应力&#xff0c;许用挤压应力&#xff0c;则圆柱将&#xff08; &#xff09;。 B.发…

如何通俗易懂地解释卷积?

马同学 从数学上讲&#xff0c;卷积就是一种运算。 某种运算&#xff0c;能被定义出来&#xff0c;至少有以下特征&#xff1a; 首先是抽象的、符号化的 其次&#xff0c;在生活、科研中&#xff0c;有着广泛的作用 比如加法&#xff1a; [公式] &#xff0c;是抽象的&…

[渝粤题库]西北工业大学电工与电子技术

电工与电子技术 1.{ 如图所示电路中&#xff0c;电压U等于&#xff08; &#xff09;。} 4V 2.{ 直流电路如图所示&#xff0c;电流I应等于&#xff08; &#xff09;。} 7A 3.{ 如图所示电路中&#xff0c;a点电位等于&#xff08; &#xff09;。} &#xff0d;1V 4.{ 将…

具有中央异常处理和VO验证的Spring Data JPA –框架

1.简介 一段时间以来&#xff0c;Spring框架已成为事实上的标准&#xff0c;可以创建任何基于REST API的应用程序。 Spring提供了各种现成的组件&#xff0c;以避免编写重复而繁琐的样板代码。 另外&#xff0c;关于Spring的美丽之处在于&#xff0c;如果有现成的解决方案&…

[渝粤题库]西北工业大学统计学

窗体顶端 一. 单选题 &#xff08;共35题,共70分&#xff09; 1. 有A、B两单位&#xff0c;A单位工人的平均工资为1100元&#xff0c;标准差为125元&#xff0c;B单位资料如下表1所示&#xff1a; 根据表1资料&#xff0c;计算B单位工人平均工资为&#xff08; 1050元 &#…

matlab获得矩阵行数或列数的函数

1、ndims(A)返回A的维数 例子&#xff1a;&#xff08;行&#xff0c;列&#xff09;&#xff08;400&#xff0c;2&#xff09;的二维数组返回2 2、size(A)返回A各个维的最大元素个数 例子&#xff1a;&#xff08;行&#xff0c;列&#xff09;&#xff08;400&#xff0c;2&…

【渝粤题库】国家开放大学2021春2402外国文学题目

试卷代号&#xff1a;2402 2021年春季学期期末统一考试 外国文学 试题&#xff08;开卷&#xff09; 2021年7月 一、埴空颖(共30分) &#xff08;一&#xff09;写出下列作品的作者&#xff08;每空1分&#xff0c;共10分&#xff09; 1.《俄狄浦斯王》_______________________…

【渝粤题库】国家开放大学2021春2517社区工作题目

试卷代号&#xff1a;2517 2021年春季学期期末统一考试 社区工作试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;将正确答案选项的字母填入括号内&#xff09; 1.内地的社区工作是指社区专职工作者在党和政府的领导下&#xff0c;依靠( )&a…

初识斯蒂尔杰斯积分(Stieltjes integral)

https://blog.csdn.net/Northernland/article/details/83051415

【渝粤题库】国家开放大学2021春2704植物学基础题目

试卷代号&#xff1a; 2704 2021年春季学期期末统一考试 植物学基础 试题 2021年7月 一、单项选择题&#xff08;共15分&#xff0c;每题3分&#xff09; 1.下列哪一项不属于胚的结构( )。 A.胚根 B.胚芽 C.胚轴 D.胚乳 2.在有丝分裂过程中&#xff0c;染色体排列到细胞中央赤道…