随笔分类 -  Effective Java

摘要:lambda 优于匿名类的主要优点是它更简洁。Java 提供了一种生成函数对象的方法,比 lambda 还 要简洁,那就是:方法引用(method references)下面是一段程序代码片段,它维护一个从任意键到 整数值的映射。如果将该值解释为键的实例个数,则该程序是一个多重集合的实现。该代码的功 阅读全文
posted @ 2020-12-09 05:03 webzom 阅读(212) 评论(0) 推荐(0) 编辑
摘要:lambda 表达式和方法引用,以便更容易地创建函数对象 Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length())) lambda 没有名称和文档; 如果计算不是自解释的,或者超过 几行,则不要将其放入 阅读全文
posted @ 2020-11-29 20:12 webzom 阅读(112) 评论(0) 推荐(0) 编辑
摘要:标记接口(marker interface),是不包含方法声明的接口,只是指定(或「标记」)一个类实现了 具有某些属性的接口。 例如,考虑 Serializable 接口(第 12 章)。通过实现这个接口,一个类表 明它的实例可以写入 ObjectOutputStream (或被「序列化」)。 标记 阅读全文
posted @ 2020-11-29 19:47 webzom 阅读(123) 评论(0) 推荐(0) 编辑
摘要:Java 类库包含几个注解类型。对于典型的程序员来说,最重要的是 @Override最重要的是 @Override 。此注解只能在 方法声明上使用,它表明带此注解的方法声明重写了父类的声明。如果始终使用这个注解,它将避免产 生大量的恶意 bug 阅读全文
posted @ 2020-09-06 21:58 webzom 阅读(105) 评论(0) 推荐(0) 编辑
摘要:public interface Operation { double apply(double x, double y); } public enum BasicOperation implements Operation { PLUS("+") { public double apply(dou 阅读全文
posted @ 2020-09-04 04:00 webzom 阅读(174) 评论(0) 推荐(0) 编辑
摘要:许多枚举通常与单个 int 值关联。所有枚举都有一个 ordinal 方法,它返回每个枚举常量类 型的数值位置。你可能想从序数中派生一个关联的 int 值: // Abuse of ordinal to derive an associated value - DON'T DO THIS publi 阅读全文
posted @ 2020-09-01 02:12 webzom 阅读(102) 评论(0) 推荐(0) 编辑
摘要:枚举是其合法值由一组固定的常量组成的一种类型,例如一年中的季节,太阳系中的行星或一副扑克牌中的花色。 在将枚举类型添加到该语言之前,表示枚举类型的常见模式是声明一组名为 int 的常量,每个类型的成员都有一个常量: // The int enum pattern - severely deficie 阅读全文
posted @ 2020-08-26 01:58 webzom 阅读(409) 评论(0) 推荐(0) 编辑
摘要:泛型的常见用法包括集合,如 Set<E > 和 Map<K,V> 和单个元素容器,如 ThreadLocal<T>和 AtomicReference<T> 。 在所有这些用途中,它都是参数化的容器。 这限制了每个容器只能有固定数量的类型参数。 通常这正是你想要的。 一个 Set 有单一的类型参数,表 阅读全文
posted @ 2020-08-25 02:47 webzom 阅读(151) 评论(0) 推荐(0) 编辑
摘要:可变参数和泛型不能很好地交互,因为可变参数机制是在数组上面构建的脆弱的抽象,并且数组具有与泛型不同的类型规则。 虽然泛型可变参数不是类型安全的,但它们是合法的。 如果选择使用泛型(或参数化)可变参数编写方法,请首先确保该方法是类型安全的,然后使用@SafeVarargs 注解对其进行标注,以免造成使 阅读全文
posted @ 2020-08-25 02:36 webzom 阅读(234) 评论(0) 推荐(0) 编辑
摘要:参数化类型是不变的。换句话说,对于任何两个不同类型的 Type1 和Type2 , List<Type1> 既不是 List<Type2> 的子类型也不是其父类型。尽管 List<String>不是 List<Object> 的子类型是违反直觉的,但它确实是有道理的。 可以将任何对象放入List<O 阅读全文
posted @ 2020-08-21 01:55 webzom 阅读(142) 评论(0) 推荐(0) 编辑
摘要:正如类可以是泛型的,方法也可以是泛型的。 对参数化类型进行操作的静态工具方法通常都是泛型的。 集合中的所有“算法”方法(如 binarySearch 和 sort )都是泛型的。 // Uses raw types - unacceptable! [Item 26] public static Se 阅读全文
posted @ 2020-05-05 18:53 webzom 阅读(340) 评论(0) 推荐(0) 编辑
摘要:泛型类型比需要在客户端代码中强制转换的类型更安全,更易于使用。 当你设计新的类型时,确保它们可以在没有这种强制转换的情况下使用。 这通常意味着使类型泛型化。 如果你有任何现有的类型,应该是泛型的但实际上却不是,那么把它们泛型化。 这使这些类型的新用户的使用更容易,而不会破坏现有的客户端 阅读全文
posted @ 2020-05-02 21:21 webzom 阅读(120) 评论(0) 推荐(0) 编辑
摘要:使用泛型编程时,会看到许多编译器警告:未经检查的强制转换警告,未经检查的方法调用警告,未经检查的参数化可变长度类型警告以及未经检查的转换警告。 你使用泛型获得的经验越多,获得的警告越少,但不要期望新编写的代码能够干净地编译 许多未经检查的警告很容易消除。 例如,假设你不小心写了以下声明: Set<L 阅读全文
posted @ 2020-05-02 21:19 webzom 阅读(109) 评论(0) 推荐(0) 编辑
摘要:首先,来介绍几个术语。泛型类或接口是指,声明里有一个或多个类型参数的类或接口[JLS, 8.1.2, 9.1.2]。例如,List接口就有一个类型参数,E,它表示了List的元素类型。接口的全名是List(读作“E的列表”),但人们通常简称它为列表。泛型类和接口都被称为泛型类型 每个泛型类型都定义了 阅读全文
posted @ 2020-04-26 17:59 webzom 阅读(291) 评论(0) 推荐(0) 编辑
摘要:嵌套类(nested class)是在另一个类中定义的类。 嵌套类应该只存在于其宿主类(enclosing class)中。 如果一个嵌套类在其他一些情况下是有用的,那么它应该是一个顶级类。 有四种嵌套类: 静态成员类,非静态成员类,匿名类和局部类。 除了第一种以外,剩下的三种都被称为内部类(inn 阅读全文
posted @ 2020-04-21 06:42 webzom 阅读(183) 评论(0) 推荐(0) 编辑
摘要:有时你可能会碰到一个类,它的实例有两个或更多的风格,并且包含一个标签字段(tag field), 表示实例的风格。 例如,考虑这个类,它可以表示一个圆形或矩形: x // Tagged class - vastly inferior to a class hierarchy! class Figur 阅读全文
posted @ 2020-04-17 00:07 webzom 阅读(141) 评论(0) 推荐(0) 编辑
摘要:当类实现接口时,该接口作为一种类型(type),可以用来引用类的实例。因此,一个类实现了一个接口,因此表明客户端可以如何处理类的实例。为其他目的定义接口是不合适的。 一种失败的接口就是所谓的常量接口(constant interface)。 这样的接口不包含任何方法; 它只包含静态 final 属性 阅读全文
posted @ 2020-04-15 05:59 webzom 阅读(225) 评论(0) 推荐(0) 编辑
摘要:在 Java 8 之前,不可能在不破坏现有实现的情况下为接口添加方法。 如果向接口添加了一个新方法,现有的实现通常会缺少该方法,从而导致编译时错误。 在 Java 8 中,添加了默认方法(default method)构造[JLS 9.4],目的是允许将方法添加到现有的接口。 但是增加新的方法到现有 阅读全文
posted @ 2020-04-15 05:49 webzom 阅读(144) 评论(0) 推荐(0) 编辑
摘要:接口是定义混合类型(mixin)的理想选择。 一般来说,mixin 是一个类,除了它的“主类型”之外,还可以声明它提供了一些可选的行为。 例如, Comparable 是一个类型接口,它允许一个类声明它的实例相对于其他可相互比较的对象是有序的。 这样的接口被称为类型,因为它允许可选功能被“混合”到类 阅读全文
posted @ 2020-04-14 06:05 webzom 阅读(196) 评论(0) 推荐(0) 编辑
摘要:条目 18 中提醒你注意继承没有设计和文档说明的「外来」类的子类化的危险。 那么对于专门为了继承而设计并且具有良好文档说明的类而言,这又意味着什么呢?首先,这个类必须准确地描述重写每个方法带来的影响。 换句话说,该类必须文档说明可重写方法的自用性(self-use)。 对于每个 public 或者 阅读全文
posted @ 2020-04-10 04:22 webzom 阅读(198) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示