首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为啥 Java 推荐将 Optional 当做参数使用

一、背景 最近开发过程,身边的同事为了实现逻辑复用,定义一个私有公共方法实现逻辑复用,定义函数签名时将上游的 Optional 作为参数传递。 IDEA 给出警告,但是并没有讲清楚为什么。...那么,为什么推荐作为参数使用呢? 二、讨论 2.1 为什么不要将 Optional 作为参数 如果将 Optional 当做参数使用,那么本身可传递 null, 依然需要进行判空再使用。...,参数是方法调用 Supplier 也违规,又契合将调用传递的目的。...三、结论 【建议】建议将 Optional 作为参数,容易造成空指针和误解,这和 Optional 的目的相违背。如果是想传递某个调用,请使用 Supplier。...【建议】建议将 Optional 作为属性,非要用建议使用 guava 包的 Optional 类。

2.8K20

什么是线程组,为什么在 Java 推荐使用

在线程组,如果发生未捕获异常,可以通过 Thread.UncaughtExceptionHandler 进行处理。 在 Java ,虽然线程组是一种功能强大的机制,但实际上并不推荐使用。...在实践,像 Executor 这样的 API 已经为线程管理提供了更加强大、可控的解决方案,相比之下,线程组已经逐渐退出 Java 中被广泛使用的范畴。...考虑到大多数应用场景都需要进行动态调度,而且现代的 JDK 版本已经增加了类似 CompletableFuture、CompletionService 等更高级且易维护的机制,因此使用线程组会带来更多的限制而不是优势...3、容易引起歧义 在 Java ,虽然 ThreadGroup 的设计旨在通过将一组线程分到同一个容器来轻松管理和控制它们,但如果使用错误,可能会导致线程状态。...因此,在 Java ,线程组已基本过时,推荐使用 Executor 框架等新的更实用的工具来进行线程管理。

26020
您找到你想要的搜索结果了吗?
是的
没有找到

Java 为什么推荐在 while 循环中使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...方案是否合理记住一点,讨论方案永远不能脱离场景,没有一种方案可以适应所有的场景,我们永远只是在探讨适合当前场景的方案。...比如微服务体系,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。...事件机制上文的场景,我更推荐事件机制进行解耦,当变量被改变时,发送变量修改事件进行处理,如常见的 Spring Event 或者其它事件推送框架。...在 Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。

73430

关于 java 的 set,get方法,而为什么推荐直接使用public

我不知道有没有人遇到过,有一段时间,我都觉得那些 set,get的用处何在,我直接写一个public直接拿不就行了,多爽,但是随着使用的频繁,越来越想去搜索一下这个问题,而不是按照官方的推荐,前辈们的使用都是建议...这里引入其中的一句话: 在任何相互关系,具有关系所涉及的各方都遵守的边界是十分重要的事情,当创建一个类库时,就建立了与客户端程序员之间的关系,他们同样也是程序员,但是他们是使用你的类库来构建应用...即使你希望客户端程序员不要直接操作你的类的某些成员,但是如果没有任何访问控制,将无法阻止此事发生。所有的东西都将赤裸裸的暴露在世人面前。...综上所述,写到这里,我诞生了一个想法,其实set ,get ,public,对于它们使用完全取决于我们程序员自己,为了让项目之间的逻辑更加清晰,有些标准自上而下,慢慢的传了下来,无论你使用那种,但是有一个东西是无法避免的...补充说明,set字面意思设置,get获取,我们了解一下java面向对象编程的封闭性与安全性,private 修饰的set get方法将方法封闭在了一个特定类,其他类就无法对其变量进行方法,这样就提高了数据的安全性

1.4K20

C++变量的存储说明符和cv-限定符

在C++创建变量时,前面有时会有一些修饰符,这里总结一下。 大体分为两个类别:存储说明符和cv-限定符。...(int n) { static int count = 0;// 在函数内用static声明,只能在函数内使用,但是无论函数是否执行,变量都存在,且多次调用时其值不会重新初始化,而是保持上一次的结果...int lama = 0;// 普通变量,只能在函数内使用,函数执行就不会存在 } 函数内创建与外部静态变量同名的变量时,将使用自己创建的,但是可以用::操作符表示使用外部的: int global...cv限定符只有两种: const volatile 这也是为什么它叫cv限定符,取首字母嘛。...因为假设编译器发现程序在几条语句中都使用了某个变量,那么为了优化,它不会让程序去查多次,而是缓存到寄存器

59510

【错误记录】set 集合容器仿函数报错 ( 具有类型“const IntCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool IntCompare::oper“ )

是 C++ 的两个关键字 , 它们通常用于修饰变量或函数 ; 这两个限定符的作用和用途不同 , 但在某些情况下可以一起使用 ; const 关键字用于表明某个变量的值不能被修改 ; 它可以修饰变量、...指针、数组等 ; volatile 关键字告诉编译器这个变量可能会在任何时刻被外部因素(如操作系统或其他进程)改变 ; 因此,编译器不会对该变量进行优化 ; 当 const 和 volatile 一起使用时..., const-volatile 限定符 , 它们表示这个变量是常量并且可能会被外部因素改变 ; 报错信息说明 , 调用 bool IntCompare::operator ()(const int...&,const int &) 函数时 , 可能会丢失 const-volatile 限定符 ; 使用 const volatile 修饰这个函数 ; 修改后的仿函数如下 : struct IntCompare...解决方案 使用 const volatile 修饰 bool operator()(const int& a, const int& b) 函数 ; 修改后的代码为 : struct IntCompare

15610

volatile关键字的使用

MSDN手册volatile关键字的解释: 大概的翻译: volatile关键字是一个类型限定符,用于声明一个对象可以通过其他语句(例如操作系统、硬件或并发执行的线程)在程序中进行修改...应用在多线程 int gdata=10;//全局变量 int fun(){ gdata=20; } thread1线程1{ fun(); } thread2线程2{ int a...ptr[c],eax int c=gdata;//mov dword ptr[c],eax //为了优化指令,编译器认为两次赋值中间没有对gdata进行赋值 //第二次对c赋值使用...,可以加volatile关键字,防止寄存器 //存储变量的副本值 } 指令的调优 1.编译器对指令的调优 使用volatile关键字 void fun(int *a){*a=10;int b...但是如果程序员希望发生顺序的调优,则可在可能发生调优的上下程序段之间添加barrier();以防止CPU对指令的调优。

27530

C++ 动态新闻推送 第33期

C++ 动态新闻推送 第33期 从reddit/hackernews/lobsters/摘抄一些c++动态 这周周末有事,发的比较早 周刊项目地址|在线地址 |知乎专栏 腾讯云+社区 欢迎投稿,推荐或自荐文章.../软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注hellogcc公众号 OSDT Weekly 2021-10-13 第119期 QT 6出beta版本了 文章 From...暗示会变,让编译器优化,AssemblerTemplate是空的,也就是明显是空的无作用的汇编也不要删掉?...没啥说的 Runtime Reflection in C++ 介绍一种reflect实现,还是传统的宏+记录类型信息 项目 weggli rust写的一个程序,能够搜索代码的代码块。...不过搁置了 ttauri 一个c++20 GUI库 CrowCpp 是一个c++ http库框架,0.3版本发布 ---- 看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢!

51520

万字长文带你掌握C++11auto和decltype的用法和区别

auto 用于泛型编程 auto 的另一个应用就是当我们不知道变量是什么类型,或者希望指明具体类型的时候,比如泛型编程。...2、对 cv 限定符的处理 「cv 限定符」是 const 和 volatile 关键字的统称: const 关键字用来表示数据是只读的,也就是不能被修改; volatile 和 const 是相反的,...以下是 auto 关键字对 cv 限定符的推导规则: 如果表达式的类型不是指针或者引用,auto 会把 cv 限定符直接抛弃,推导成 non-const 或者 non-volatile 类型。...从代码是否健壮的角度考虑,我推荐使用 decltype,它没有那么多是非;但是 decltype 总是显得比较麻烦,尤其是当表达式比较复杂时,例如: vector nums; decltype(nums.begin...如果你的表达式类型不复杂,我还是推荐使用 auto 关键字,优雅的代码总是叫人赏心悦目,沉浸其中。 四、C++返回值类型后置(跟踪返回值类型) 在泛型编程,可能需要通过参数的运算来得到返回值的类型。

35610

教科书不会讲的C语言关键字volatile用法

在C/C++嵌入式代码,你是否经历过以下情况: 代码执行正常–直到你打开了编译器优化 代码执行正常–直到打开了中断 古怪的硬件驱动 RTOS的任务独立运行正常–直到生成了其他任务 如果你的回答是“yes...你并不是唯一的,很多程序员都不能正确使用volatile。不幸的是,大多数c语言书籍对volatile的藐视,只是简单地一带而过。 volatile用于声明变量时的使用限定符。...在程序循环查看该状态寄存器的值是否变为非0。 下面是最容易想到,但错误的实现方法: 当你打开编译器优化时,程序总是执行失败。...中断服务程序 在中断服务程序,经常会修改一些全局变量值,来作为主程序的判断条件。例如,在串口中断服务程序,可能会检测是否接收到了ETX(假如是消息的结束标识符)字符。...相反,我常常看到程序员们错误的使用volatile。 如果你被要求去修改一个很古怪的代码,请在程序查找一下volatile关键字;如果你什么也没有找到,上面讨论的例子可以向你提供一些解决问题的思路。

75320

GCC在C语言中内嵌汇编-转载

4、限制字符 4.1、限制字符列表 限制字符有很多种,有些是与特定体系结构相关,此处仅列出常用的限定字符和i386可能用到的一些常用的限定符。...使用"volatile"也可以达到这个目的,但是我们在每个变量前增加该关键字,不如使用"memory"方便 关于编译器优化的两个类型限定词:volatile和restrict http://www.diybl.com...但编译器并不会验证你定义为restrict的指针,是否真正是某个数据的唯一访问途径;就像数组的下标越 界一样,如果你遵守规则,编译器并不会指出错误,但后果由你自己负责:) 同样看个有趣的类子...对于优化来说,volatile是强制性,而restrict是建议性。也就是加了volatile则强制不进行优化,而加入restrict编译器也 一定肯定优化。...同时也告诉调用 者仅使用满足restrict定义条件的参数,如果你遵守,嘿嘿。。。

2.9K20

C++打怪升级(一)- 命名空间、缺省形参、重载

域作用限定符:: scope::tag 两个操作数:左操作数是指定的一个域,右操作数是一个标识符(变量、函数名等) 使用域作用限定符访问命名空间中的成员**:** #include <iostream...前面已经介绍了使用域作用限定符访问命名空间中成员的方法,接下来我们来看看另外两种访问命名空间成员的方法吧!...---- 使用关键字using将命名空间某个成员引入 又称为命名空间的部分展开; 引入该成员后,就可以直接使用该成员了,不需要再用域作用限定符了(当然用了也不会出错)。....h; 旧编译器(如vc 6.0)还支持格式,后续编译器已不支持,因此推荐使用+std的方式 。...只有返回值类型不同,构成重载,因为在函数调用时无法区分要调用哪一个函数,产生了二义性。 那么,有一个问题:C++函数返回值类型可以用来修饰函数名吗?

82920

Modern C++,学炸了!!

C++ 面向对象语法 访问限定符 public/protected/private 构造函数/析构函数/拷贝构造 多态 虚函数与纯虚函数、虚函数实现机制、虚函数表 继承原理、虚继承、菱形继承 new/...但是上面的公式,在一个逗号表达式 auto __begin = begin-expr, __end = end-expr; 由于只使用了一个类型符号 auto 导致起始迭代子 __begin 和结束迭代子...__end 是同一个类型,这样不太灵活,在某些设计,可能希望结束迭代子是另外一种类型。...这部分内容节选自《C++ 服务器开发精髓》一书: 4.4 C++20 的改动 C++20 进一步弥补 C++ 这门语言的“功能不完备性”,所谓“功能不完备性”,即与 Java/Go 等语言相比,C++...程序的一些功能(如文件操作、协程等)需要直接调用操作系统的 API ,而不像其他语言自带 SDK,这样对于要求多平台运行的程序,必须使用宏定义分别编写一套。

3K10

C++ 中文周刊 第99期

C++ 中文周刊 第99期 周刊项目地址 ---- 资讯 标准委员会动态/ide/编译器信息放在这里 编译器信息最新动态推荐关注hellogcc公众号 2023-02-01 第187期 有武汉线下活动,...Practices jetbrains出的报告,关于c++20使用,编译工具cmake使用率,代码分析使用率做了个列举,这里直接贴一下 构建工具,cmake越来越普及,虽然难用 什么?...甚至写测试 使用什么代码分析工具? 嘻嘻,甚至不用分析工具 完整报告可以去他们官网看。...WithAppender(GetAnotherSpecialAppenderParams());         }).         // ...         .Build(); } 来个现实生活的例子...is_layout_compatible_v); static_assert(std::is_layout_compatible_v<const int, int const volatile

48730

C++20新书推荐

今天推荐一个新书,C++20的一些特性: 通过Modules淘汰了C++之前编写大程序的陈旧方式; 使用Concepts帮助创建类型安全的模板和实现灵活的模板特化; 使用Ranges彻底改变了处理数据的方式...C++20的std::endian可获取当前平台是大端序还是小端序,std::make_shared支持构造数组,std::remove_cvref移除cv和ref,std::to_address可获取地址...C++20可以使用midpoint计算中位数、lerp计算线性差值,std::is_bounded_array检查数组是不是有界,并添加了Ranges库以用来处理元素范围和的组件。...C++20,可使用lambda表达式捕获this方式,lambda表达式可以使用模板,某些时候不需要使用typename,结构体可以直接初始化。...使用概念,编程者可以使用预定义的概念,也可以定义自己的概念。C++20将auto和概念的用法统一到了一起,可以不使用auto,而是使用概念。

75310

C++ 动态新闻推送 第2期

每周更新 周刊项目地址 github,在线地址 discord讨论群组 |知乎专栏 欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue ---- 资讯 编译器信息最新动态推荐关注hellogcc...作者的场景是解析STL格式的文件,如果是大文件,也会很慢,最终使用strtof替换sscanf,解决了问题,这里也有个问答用strtok替换sscanf 还有个14年的bug单 结论,sscanf的性能指标文档没给...涉及到win32相关的东西,不了解没有细看 C++20 Range Adaptors and Range Factories 介绍range的adaptor和factor。...100, 121, 144, 169, 196} fmt::print("squares under 200: {}\n", squares_under_200); } 视频 c++weekly C+...使用场景,hash 计算,泄漏符号 ---- 看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!

41510
领券