
























Java 语言函数是不支持out参数的,这在有些时候非常不方便,比如C#经常用到的 boolean tryParseInt(String input, out int result) 函数, 函数返回值返回是否可以成功转换, 还需要一个参数能返回转换后的数值. 很多人使用容器类作为这个out参数, 代码比较难看, 我认为最优雅的方式是是使用 AtomicReference 类型(或 AtomicInteger等)变量来作为 out 参数.
Java 语言函数传参都是按值传递的, 没有按引用传递之说, 即使是非原始类型(一般对象类)也是按照值传递的, 可以理解为Java 传递的是对象引用(内存地址)的副本.
总结:
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 库的 ImmutablePair 和 ImmutableTriple .
接口中一般中仅仅包含方法的签名, 没有具体实现. Java 8引入了default方法, interface中的这类方法可以包含实现, 作用有: (1) 避免在接口中引入了新方法后, 要求所有实现类都必须实现该方法才行. (2) 编程范式中一直强调组合优于继承, interface 提供一个default实现后, 可以避免将这个共用方法实现放到一个基类中.
interface Animal {
public void eat();
public default void sleep() {
System.out.println("sleep");
}
}
Java 17之后正式引入了 Record 类, 简化了数据类的定义, 这是一个不可变数据类型, java自动提供 equals()/hashCode()/toString()方法, 大大减少了样板代码.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。