optional

Java 8 开发的 4 大顶级技巧

妖精的绣舞 提交于 2020-08-08 09:26:51
来源:codeceo codeceo.com/article/java-8-top-tips.html 我使用Java 8编码已经有些年头,既用于新的应用程序,也用来迁移现有的应用,感觉是时候写一些我发现的非常有用的“最佳实践”。 我个人并不喜欢“最佳实践”这个说法,因为它意味着“一刀切”的解决方案,而编码不可能是这样的工作方式——我们需要亲自去发现什么样的解决方案才是有效的。 但是我发现了一些Java 8代码中可以帮助我们的一些选择,让我们一起来看看吧。 1.Optional Optional是一个严重被低估的功能,并且有潜力删除很多困扰我们的NullPointerExceptions。这在代码边界中(要么是正在使用的API,要么是正在暴露的API)特别有用,因为它允许你和你的调用代码来推理所期待的东西。 然而,不加思考和设计就应用Optional可能会导致影响大量的类,并可能导致可读性更差。下面是一些关于如何高效使用Optional的技巧。 Optional应该只用于返回类型 ……不是参数,也不是字段。幸运的是,IntelliJ IDEA的让你打开检查来查看是是否遵循这些建议。 Optional值应在遇到它们的地方中处理。IntelliJ IDEA的建议会防止代码Optional泄漏,所以请记得在你发现Optional的地方处理它,迅速采取行动。 不应该简单调用get()

pywinauto客户端自动化---窗口进行截图

不打扰是莪最后的温柔 提交于 2020-08-08 02:09:44
  做自动化过程中时长会遇到一些截图操作,那么在做客户端的时候,应该怎么进行截图呢? 窗口截图 在pywinauto中存在自带的截图函数 capture_as_image() 源码: def capture_as_image(self, rect= None): """ Return a PIL image of the control. See PIL documentation to know what you can do with the resulting image. """ control_rectangle = self.rectangle() if not (control_rectangle.width() and control_rectangle.height()): return None # PIL is optional so check first if not ImageGrab: print ( " PIL does not seem to be installed. " " PIL is required for capture_as_image " ) self.actions.log( " PIL does not seem to be installed. " " PIL is required for capture_as_image

一个 json 转换工具

流过昼夜 提交于 2020-08-07 07:25:50
在前后端的数据协议(主要指 http 和 websocket )的问题上,如果前期沟通好了,那么数据协议上问题会很好解决,前后端商议一种都可以接受的格式即可。但是如果接入的是老系统、第三方系统,或者由于某些奇怪的需求(如为了节省流量,json 数据使用单字母作为 key 值,或者对某一段数据进行了加密),这些情况下就无法商议,需要在前端做数据转换,如果不转换,那么奔放的数据格式可读性差,也会造成项目难以维护。 这也正是我在项目种遇到的问题,网上也找了一些方案,要么过于复杂,要么有些功能不能很好的支持,于是有了这个工具 class-converter 。欢迎提 issue 和 star~~ https://github.com/zquancai/class-converter 下面我们用例子来说明下: 面对如下的 Server 返回的一个用户 user 数据: { "i": 1234, "n": "name", "a": "1a2b3c4d5e6f7a8b" } 或者这个样的: { "user_id": 1234, "user_name": "name", "u_avatar": "1a2b3c4d5e6f7a8b" } 数据里的 avatar 字段在使用时,可能需要拼接成一个 url ,例如 https://xxx.cdn.com/1a2b3c4d5e6f7a8b.png 。

Java8——Stream流

扶醉桌前 提交于 2020-08-07 05:29:48
Stream 是数据渠道,用于操作集合、数组等生成的元素序列。 Stream 操作的三个步骤: 创建Stream 中间操作 终止操作 一、获取stream的四种方式 通过 collection 系列集合的 stream() 或 parallelStream() 获取。 @Test void test11(){ List<String> list = new ArrayList<>(); Stream<String> stringStream = list.stream(); } 通过 Arrays 中的静态方法 stream() 获取数组流。 @Test void test11(){ Person[] person = new Person[10]; Arrays.stream(person); } 通过 Stream 中的静态方法 of() 。 @Test void test11(){ Stream<String> stream = Stream.of("a", "b", "c"); } 创建无限流 /** * 迭代 */ @Test void test11(){ Stream<Integer> integerStream = Stream.iterate(0, x -> x + 2); } /** * 生成 */ @Test void test11(){ Stream

IAT表

主宰稳场 提交于 2020-08-07 04:06:25
0X0 0 DLL介绍 DLL翻译器为动态链接库,原来不存在DLL的概念只有,库的概念,编译器会把从库中获取的二进制代码插入到应用程序中。在现在windows操作系统使用了数量庞大的库函数(进程,内存,窗口,消息)采用这种包含库的方式,会造成内存严重的浪费。因此,windows OS 设计者根据需要引入了DLL这一概念 (1) 不要把库包含到程序中,单独组成DLL文件,需要时调用即可 (2) 内存映射技术使加载后的DLL代码,资源在多个进程中实现共享 (3) 更新库时只要替换相关的DLL文件即可 0X01 IMAGE_IMPORT_DESCRIPTOR IMAGE_IMPORT_DESCRIPTOR 结构体记录着PE文件要导入哪些库文件 IMAGE_IMPORT_DESCRIPTOR 结构体如下 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // RVA to original unbound INT (PIMAGE_THUNK_DATA) 存着INT表地址 } DUMMYUNIONNAME; DWORD TimeDateStamp; // 0

Java8——Stream流

廉价感情. 提交于 2020-08-06 20:34:01
Stream 是数据渠道,用于操作集合、数组等生成的元素序列。 Stream 操作的三个步骤: 创建Stream 中间操作 终止操作 一、获取stream的四种方式 通过 collection 系列集合的 stream() 或 parallelStream() 获取。 @Test void test11(){ List<String> list = new ArrayList<>(); Stream<String> stringStream = list.stream(); } 通过 Arrays 中的静态方法 stream() 获取数组流。 @Test void test11(){ Person[] person = new Person[10]; Arrays.stream(person); } 通过 Stream 中的静态方法 of() 。 @Test void test11(){ Stream<String> stream = Stream.of("a", "b", "c"); } 创建无限流 /** * 迭代 */ @Test void test11(){ Stream<Integer> integerStream = Stream.iterate(0, x -> x + 2); } /** * 生成 */ @Test void test11(){ Stream

nodejs模块路径alias

爷,独闯天下 提交于 2020-08-06 20:05:49
nodejs的模块引用,使用相对路径,会造成写一堆../,非常不便。 有2种好的修改方式: 1. NODE_PATH设置路径别名 " scripts " : { " start " : " cross-env NODE_PATH=.;./mod node index.js " , } NODE_PATH的路径用分号(Windows)或冒号(Mac OS或linux)分割多个路径,. 表示本目录,./mod表示一个子目录。 缺点是,不同系统设置多个路径的分隔符不同,用了cross-env也于事无补。 2. module_alias模块 npm i --save module-alias // Aliases "_moduleAliases" : { "@root" : ".", // Application's root "@deep" : "src/some/very/deep/directory/or/file" , "@my_module" : "lib/some-file.js" , "something" : "src/foo", // Or without @. Actually, it could be any string } // Custom module directories, just like `node_modules` but with your

太酷炫了!!我会Python 导包八种方法,你呢?

老子叫甜甜 提交于 2020-08-06 19:33:17
首发于微信公众号:《Python编程时光》 原文链接: https://mp.weixin.qq.com/s/7F4pyDVObJBt-3XrxxYxLQ 今天给大家介绍我使用过的 Python 导包的八种方法。 1. 直接 import 人尽皆知的方法,直接导入即可 >>> import os >>> os.getcwd() '/home/wangbm' 与此类似的还有,不再细讲 import ... import ... as ... from ... import ... from ... import ... as ... 一般情况下,使用 import 语句导入模块已经够用的。 但是在一些特殊场景中,可能还需要其他的导入方式。 下面我会一一地给你介绍。 2. 使用 _ import _ __import__ 函数可用于导入模块,import 语句也会调用函数。其定义为: __import__(name[, globals[, locals[, fromlist[, level]]]]) 参数介绍: name (required): 被加载 module 的名称 globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global() locals (optional): 包含局部变量的字典,内部标准实现未用到该变量,采用默认值 -

Bean后置处理器

江枫思渺然 提交于 2020-08-06 15:34:40
spring在创建对象( org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance )的时候, 使用了这个 构造函数后置处理器, 用来选择使用哪个构造函数的. 所以这个后置处理器的执行时机是: 对象 实例化之前执行 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#determineConstructorsFromBeanPostProcessors @Nullable protected Constructor<?>[] determineConstructorsFromBeanPostProcessors(@Nullable Class<?> beanClass, String beanName) throws BeansException { if (beanClass != null && hasInstantiationAwareBeanPostProcessors()) { for (BeanPostProcessor bp : getBeanPostProcessors()) { if (bp instanceof

Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

主宰稳场 提交于 2020-08-06 13:12:43
1.Maven中依赖概述 Maven 中的依赖关系是有传递性的。例如:项目B依赖项目C(B —> C),如果有一个项目A依赖项目B(A —> B)的话,那么项目A也会依赖项目C(A —> C)。虽然,这种依赖的自动传递性给我们维护项目的必要依赖关系带来了极大地帮助,但当我们在某些情况下,需要在项目A中排除对项目C的依赖时,这时又该怎么做呢? Maven 为我们提供了两种解决方案,分别是 可选依赖 (Optional Dependencies)和 依赖排除 (Dependency Exclusions)。 2.哪些场景需要排除依赖 我们继续用上文中的例子,虽然项目A依赖项目B,但当项目A不是完全依赖项目B的时候,即项目A只用到了项目B的一部分功能,而正巧项目B这部分功能的实现,并不需要依赖于项目C,这个时候,项目A就应该排除对项目C的依赖。 有的人可能有这样的疑问,为什么要排除对项目C的依赖呢?就算包含了对项目C的依赖,也不会出问题啊。事实上,表面上看确实不会出现问题。但是,我们必须记住一点:当我们使用一个工程时,控制实际需要的依赖列表非常重要。我们在享受 Maven 依赖的自动传递性带给我们的便利的同时,要时刻注意引入冗余、不必要的依赖对我们项目产生的负面影响。 3.可选依赖(Optional Dependencies)—— optional 从项目B入手,使项目A依赖项目B时