惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Heimdal Security Blog
S
Security @ Cisco Blogs
N
News | PayPal Newsroom
J
Java Code Geeks
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
V
V2EX
WordPress大学
WordPress大学
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
AI
AI
小众软件
小众软件
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
美团技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
F
Full Disclosure
B
Blog RSS Feed
Forbes - Security
Forbes - Security
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
Jina AI
Jina AI
Cisco Talos Blog
Cisco Talos Blog
U
Unit 42
Project Zero
Project Zero
H
Hacker News: Front Page
Y
Y Combinator Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
S
Secure Thoughts
The Hacker News
The Hacker News
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - harrychinese

机器学习实战示例和基础知识查漏补缺 jupyter notebook上的java kernel 数据分析中几个常用的java类 我认为 C# 几个重要的设计缺陷 Jupyter notebook 最简安装方法 使用Tribuo分析波士顿房产数据 Java AI agent框架 java jbang 工具让java作为脚本语言 VS code + Jypyter 插件构建 Java notebook 环境 使用 VS code + Oracle java 插件搭建java语言原生的notebook环境 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science Handy toolbox for IT developers 中学学校教材下载 深度学习模型训练5个关键步骤 使用SpringBoot实现一个执行通用SQL的Rest接口 学益升X1和国悦K3阅读器 状态机 使用场景规则匹配模式代替复杂的if else条件判断 vscode 数据处理的插件 iPhone XR 升级非最新版IOS duckdb nuget打包部署完整步骤 ML.Net机器学习基本知识 机器学习资料汇总 优化算法知识和类库 C# XML 序列化器 画草图和示意图的好工具 .net debug tools 运筹学/最优化讲义.pdf Lazarus
Java 语言常用的技巧
harrychinese · 2026-05-21 · via 博客园 - harrychinese

Java 语言常用的技巧

如何让函数支持out参数

Java 语言函数是不支持out参数的,这在有些时候非常不方便,比如C#经常用到的 boolean tryParseInt(String input, out int result) 函数, 函数返回值返回是否可以成功转换, 还需要一个参数能返回转换后的数值. 很多人使用容器类作为这个out参数, 代码比较难看, 我认为最优雅的方式是是使用 AtomicReference 类型(或 AtomicInteger等)变量来作为 out 参数.

Java 语言函数传参都是按值传递的, 没有按引用传递之说, 即使是非原始类型(一般对象类)也是按照值传递的, 可以理解为Java 传递的是对象引用(内存地址)的副本.
总结:

  • AtomicReference 类型(或 AtomicInteger等)变量, 可以起到out参数效果
  • 自定义类对象: 可以起到out参数效果, 有时候显得大材小用
  • 数组或集合类对象, 可以起到out参数效果, 但可读性差
  • String, Integer, Boolean: 不可以, 因为是不可变对象
  • int, boolean, 不可以, 按值传递
    public static boolean tryParseInt(String input, AtomicInteger result) {
        result.set(10);
        return true;
    }

    public static boolean tryParseInt(String input, AtomicReference<Integer> result) {
        result.set(10);
        return true;
    }

如何让函数返回多个值

当函数返回多个值的时候, 通常做法是自定义了包含多个属性的结果类, 但如果这个结果类只是使用一次, 总觉得有点多此一举. C#和Python支持 tuple, Java 可以使用 apache common-lang 库的 ImmutablePairImmutableTriple .

Interface 中定义 default 函数的作用

接口中一般中仅仅包含方法的签名, 没有具体实现. Java 8引入了default方法, interface中的这类方法可以包含实现, 作用有: (1) 避免在接口中引入了新方法后, 要求所有实现类都必须实现该方法才行. (2) 编程范式中一直强调组合优于继承, interface 提供一个default实现后, 可以避免将这个共用方法实现放到一个基类中.

interface Animal {

    public void eat(); 

    public default void sleep() {
        System.out.println("sleep");
    }
}

record 类型

Java 17之后正式引入了 Record 类, 简化了数据类的定义, 这是一个不可变数据类型, java自动提供 equals()/hashCode()/toString()方法, 大大减少了样板代码.