Skip to main content

Recently Updated Pages

59. 了解并使用库

Effective Java 第九章 通用程序设计

  假设你想要生成 0 到某个上界之间的随机整数。面对这个常见任务,许多程序员会编写一个类似这样的小方法: // Common but deeply flawed! static Random ...

Updated 3 years ago by wandersky

58. for-each 循环优于传统 for 循环

Effective Java 第九章 通用程序设计

  正如在条目 45 中所讨论的,一些任务最好使用 Stream 来完成,一些任务最好使用迭代。下面是一个传统的 for 循环来遍历一个集合: // Not the best way to it...

Updated 3 years ago by wandersky

57. 最小化局部变量的作用域

Effective Java 第九章 通用程序设计

  这条目在性质上类似于条目 15,即“最小化类和成员的可访问性”。通过最小化局部变量的作用域,可以提高代码的可读性和可维护性,并降低出错的可能性。   较早的编程语言(如 C)要求必须在代码块...

Updated 3 years ago by wandersky

56. 为所有已公开的 API 元素编写文档注释

Effective Java 第八章 方法

  如果 API 要可用,就必须对其进行文档化。传统上,API 文档是手工生成的,保持文档与代码的同步是一件苦差事。Java 编程环境使用 Javadoc 实用程序简化了这一任务。Javadoc...

Updated 3 years ago by wandersky

55. 明智审慎地返回 Optional

Effective Java 第八章 方法

  在 Java 8 之前,编写在特定情况下无法返回任何值的方法时,可以采用两种方法。要么抛出异常,要么返回 null(假设返回类型是对象是引用类型)。但这两种方法都不完美。应该为异常条件保留异...

Updated 3 years ago by wandersky

54. 返回空的数组或集合,不要返回 null

Effective Java 第八章 方法

  像如下的方法并不罕见: // Returns null to indicate an empty collection. Don't do this! private final List<...

Updated 3 years ago by wandersky

53. 明智审慎地使用可变参数

Effective Java 第八章 方法

  可变参数方法正式名称称为可变的参数数量方法「variable arity methods」 [JLS, 8.4.1],接受零个或多个指定类型的参数。 可变参数机制首先创建一个数组,其大小是在...

Updated 3 years ago by wandersky

52. 明智审慎地使用重载

Effective Java 第八章 方法

  下面的程序是一个善意的尝试,根据 Set、List 或其他类型的集合对它进行分类: // Broken! - What does this program print? public cla...

Updated 3 years ago by wandersky

51. 仔细设计方法签名

Effective Java 第八章 方法

  这一条目是 API 设计提示的大杂烩,但它们本身并足以设立一个单独的条目。综合起来,这些设计提示将帮助你更容易地学习和使用 API,并且更不容易出错。   仔细选择方法名名称。名称应始终遵守...

Updated 3 years ago by wandersky

50. 必要时进行防御性拷贝

Effective Java 第八章 方法

  愉快使用 Java 的原因,它是一种安全的语言(safe language)。 这意味着在缺少本地方法(native methods)的情况下,它不受缓冲区溢出,数组溢出,野指针以及其他困扰...

Updated 3 years ago by wandersky

49. 检查参数有效性

Effective Java 第八章 方法

  本章(第 8 章)讨论了方法设计的几个方面:如何处理参数和返回值,如何设计方法签名以及如何记载方法文档。 本章中的大部分内容适用于构造方法和其他普通方法。 与第 4 章一样,本章重点关注可用...

Updated 3 years ago by wandersky

48. 谨慎使用流并行

Effective Java 第七章 Lambda表达式和流

  在主流语言中,Java 一直处于提供简化并发编程任务的工具的最前沿。 当 Java 于 1996 年发布时,它内置了对线程的支持,包括同步和 wait / notify 机制。 Java 5...

Updated 3 years ago by wandersky

47. 优先使用 Collection 而不是 Stream 来作为方法的返回类型

Effective Java 第七章 Lambda表达式和流

  许多方法返回元素序列(sequence)。在 Java 8 之前,通常方法的返回类型是 Collection,Set 和 List 这些接口;还包括 Iterable 和数组类型。通常,很容...

Updated 3 years ago by wandersky

46. 优先考虑流中无副作用的函数

Effective Java 第七章 Lambda表达式和流

  如果你是一个刚开始使用流的新手,那么很难掌握它们。仅仅将计算表示为流管道是很困难的。当你成功时,你的程序将运行,但对你来说可能没有意识到任何好处。流不仅仅是一个 API,它是基于函数式编程的...

Updated 3 years ago by wandersky

45. 明智审慎地使用 Stream

Effective Java 第七章 Lambda表达式和流

  在 Java 8 中添加了 Stream API,以简化串行或并行执行批量操作的任务。 该 API 提供了两个关键的抽象:流 (Stream),表示有限或无限的数据元素序列,以及流管道 (s...

Updated 3 years ago by wandersky

44. 优先使用标准的函数式接口

Effective Java 第七章 Lambda表达式和流

  现在 Java 已经有 lambda 表达式,编写 API 的最佳实践已经发生了很大的变化。 例如,模板方法模式[Gamma95],其中一个子类重写原始方法以专门化其父类的行为,变得没有那么...

Updated 3 years ago by wandersky

43. 方法引用优于 lambda 表达式

Effective Java 第七章 Lambda表达式和流

  lambda 优于匿名类的主要优点是它更简洁。Java 提供了一种生成函数对象的方法,比 lambda 还要简洁,那就是:方法引用(method references)。下面是一段程序代码片...

Updated 3 years ago by wandersky

42. lambda 表达式优于匿名类

Effective Java 第七章 Lambda表达式和流

  在 Java 8 中,添加了函数式接口,lambda 表达式和方法引用,以便更容易地创建函数对象。 Stream API 随着其他语言的修改一同被添加进来,为处理数据元素序列提供类库支持。 ...

Updated 3 years ago by wandersky

41. 使用标记接口定义类型

Effective Java 第六章 枚举和注解

  标记接口(marker interface),是不包含方法声明的接口,只是指定(或「标记」)一个类实现了具有某些属性的接口。 例如,考虑 Serializable 接口(第 12 章)。通过...

Updated 3 years ago by wandersky

40. 始终使用 Override 注解

Effective Java 第六章 枚举和注解

  Java 类库包含几个注解类型。对于典型的程序员来说,最重要的是 @Override。此注解只能在方法声明上使用,它表明带此注解的方法声明重写了父类的声明。如果始终使用这个注解,它将避免产生...

Updated 3 years ago by wandersky