java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...
我正在编写一个可序列化的类,它接受几个参数,包括一个函数:
public class Cls implements Serializable {
private final Collection _coll;
private final Function _func;
public Cls(Collection coll, Function func) {
_coll = coll;
_func = func;
}
}
func存储在成员变量中,因此需要可序列化. Java lambdas are serializable if the type they’re being assigned to is serializable.什么是最好的方法来确保我的构造函数中传递的函数是可序列化的,如果它是使用lambda创建的?
>创建一个SerializableFunction类型并使用它:
public interface SerializableFunction implements Function, Serializable {}
....
public Cls(Collection coll, SerializableFunction func) {...}
问题:
> coll和func参数之间现在不匹配,因为func在签名中被声明为可序列化,但是coll不是,但是都需要可序列化才能工作.
>它不允许Function的其他实现可序列化.
>在构造函数上使用一个类型参数:
public & Serializable>
Cls(Collection coll, F func) {...}
问题:
>比1更灵活,但更混乱.
>两个参数之间仍然存在不匹配 – func参数是在编译时类型的父进程中实现Serializable所必需的,但是coll只是需要以某种方式进行序列化(尽管如果需要可以将其删除).
编辑当尝试使用lambda或方法引用调用时,此代码实际上不会编译.
把它留给来电者
这需要调用者知道(从javadocs或者是试验和错误)参数需要是可序列化的,并且适当地转换:
Cls c = new Cls(strList, (Function & Serializable)s -> ...);
要么
Cls c = new Cls(strList, (Function & Serializable)Foo::processStr);
这是一个丑陋的IMO,并且使用lambda的初始天真的实现保证破坏,而不是像coll一样工作(因为大多数集合可以以某种方式串行化).这也将类的实现细节推送到调用者.
目前,我倾向于选项2,作为对呼叫者施加最小负担的那个,但是我不认为这里有一个理想的解决方案.任何其他建议如何正确地做到这一点?
编辑:也许需要一些背景.这是一个在storm中运行的类,它是一个螺栓,它被序列化以传送到删除集群来执行.该功能是在集群上运行时对已处理的元组执行操作.所以它是类的目的的很大一部分,它是可序列化的,并且函数参数是可序列化的.如果不是,则该类根本不可用.
java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...相关推荐
- java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
[单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...
- Java面试之Java基础8——在 Java 中定义⼀个不做事且没有参数的构造⽅法的作⽤
在 Java 中定义⼀个不做事且没有参数的构造⽅法的作⽤,比如下面的代码: class Father {private String str;// 这个空构造方法有什么作用呢?Father(){}pu ...
- 39.在Java中定义一个不做事且没有参数的构造方法的作用?
1 在Java中定义一个不做事且没有参数的构造方法的作用 Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会 调用父类中"没有参数的构造方法&quo ...
- java 中list类型未知_Java集合-List
Java Collection 在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的A ...
- java中是否支持多重继承_java支持多重继承吗 JAVA特性面试题:
1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...
- java 中random类使用_Java中的天使和魔鬼:Unsafe类
我们在看ConcurrentHashMap源码时经常看到Unsafe类的使用,今天我们来了解下Unsafe类. Java是一个安全的编程语言,它能最大程度的防止程序员犯一些低级的错误(大部分是和内存管 ...
- java中的分层概念_Java分层概念
1.JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分?(下面所描述的service层就是biz) 首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对 ...
- java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...
synchronized关键字的意义是什么? 什么时候应该是方法synchronized? 这是什么编程和逻辑? Java中,"synchronized"(同步)是什么意思?什么时 ...
- java中缓冲区和缓存_Java中的Google协议缓冲区
java中缓冲区和缓存 总览 协议缓冲区是一种用于结构化数据的开源编码机制. 它是由Google开发的,旨在实现语言/平台中立且可扩展. 在本文中,我的目的是介绍Java平台上下文中协议缓冲区的基本用 ...
最新文章
- Html5 History API解析
- 【宋红康学习日记3】运算符
- 五小步让VS Code支持AngularJS智能提示
- 深度学习核心技术精讲100篇(四十一)-阿里飞猪个性化推荐:召回篇
- 测试:脱离VS2010使用自动化测试时出现 6DA215C2-D80D-42F2-A514-B44A16DCBAAA 错误
- vue执行操作成功但页面不刷新_vue.js数据更新页面不刷新
- Windows Server 2008 Server Core模式
- c语言指针 r,C语言指针的高级操作
- mybatis在指定库建表_搭建MyBatis开发环境及基本的CURD介绍
- 斗牛/牛牛经典算法java版
- 苹果中国官网新增蚂蚁花呗 24 期分期免息服务
- 基于RNA的新型癌症疗法介绍
- Markdown快速入门
- JavaEE | 基本类型包装类
- matlab线性方程组求解
- JVM 相关 - 深入 JVM 的钥匙 WhiteBox API
- JsDelivr CDN缓存刷新工具-缓存清除-缓存更新
- 对“巴洛克式“(巴罗克式)的理解
- 【论文阅读】SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects
- 微软所有正版软件下载网站ITELLYOU_我是亲民_新浪博客
热门文章
- go的25个关键字(保留字)和36个预定标识符
- Linux find查找文件夹(目录)所在位置
- kustomize+argo
- docker history 27f1068ca9da --no-trunc查看镜像dockerfile内容
- minio安装及特性原理介绍
- 使用 LxRunOffine 迁移 WSL Ubuntu安装目录
- Webpack安装、打包过程及开发过程超详细教程(专治看不懂学不会)
- java中的重写与重载_java中的重写与重载
- vue项目获取下拉框选中id_vue treeselect获取当前选中项的label实例
- VS2015+OpenCV2.4.13环境搭建详细步骤及自带示例编译运行