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

推荐订阅源

Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
量子位
aimingoo的专栏
aimingoo的专栏
V
Visual Studio Blog
Y
Y Combinator Blog
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Security Blog
Microsoft Security Blog
B
Blog
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
博客园 - 聂微东
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks

博客园 - 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()方法, 大大减少了样板代码.