effective-java相关内容

为什么有时在泛型方法的定义中省略了返回类型之前的尖括号

我正在阅读有效Java第五章中有关泛型的内容,特别是有关偏爱泛型方法的项目.我注意到有时有时会省略返回类型之前的方法声明中的类型参数(在尖括号之间).有很多类似的情况,但是例如在第二版的第135页上: public void popAll(Collection dst){而(!isEmpty())dst.add(pop());} 另一方面,我在声明中看到了类似的通用方法 pub ..
发布时间:2021-05-10 18:47:10 其他开发

在Java中不可变

在有效的Java 中,Bloch建议将所有字段最终确定为对象不可变. 是否有必要这样做?不只是不提供访问器方法就使其不可变. 例如 class A { private int x; A (int x) { this.x = x; } } 即使我没有将x声明为final,上述类也是不可变的?我想念什么吗? 解决方案 ..
发布时间:2020-06-13 19:01:20 其他开发

如果我在Java中覆盖“等于"方法,为什么需要覆盖哈希码?

我知道每当Java中重写equals方法时,都需要重写哈希码.那仅仅是合同.我试图了解其背后的逻辑.我正在通过 Joshua Bloch 阅读* Effective Java,我遇到了这段代码(项目9,第45页): import java.util.HashMap; import java.util.Map; public final class PhoneNumber { pri ..
发布时间:2020-06-13 19:01:15 其他开发

在equals和hashcode方法中使用Hibernate实体对象的自动生成的ID

可爱的等于和哈希码,所有的理论都在此处和也在此处 我决定在多个休眠实体/域对象的equals()和hashcode()中使用自动生成的ID. 但是,许多网站都说您不应该这样做,因为存在在比较对象或使用哈希码的过程中将对象第一次持久保存到数据库中的风险. 我的观点是,在大多数用例中,这比其他任何要更改的字段都不太可能. 单个域对象在首次创建时具有一次生成的ID,而几乎每个其他 ..
发布时间:2020-06-13 19:01:09 其他开发

使用工厂方法了解JDBC之类的服务提供程序框架背后的概念

来自有效的Java (项目1 :考虑静态工厂方法而不是构造函数): 由静态工厂方法返回的对象的类甚至不需要存在 在编写包含该方法的类时.如此灵活的静电工厂 方法构成服务提供者框架(例如Java数据库)的基础 连接性API(JDBC).服务提供商框架是一种系统,其中 多个服务提供商实施一项服务,然后系统进行实施 对客户可用,将他们与实现脱钩. 我特别不明白为什么书说的是静态工厂方法返回的 ..
发布时间:2019-09-02 13:15:55 Java相关

有效的Java项目11:明智地覆盖克隆

对于带有数组字段的类,Josh说如果clone方法只返回super.clone(),则生成的类实例将在原始字段中具有正确的值,但其数组字段将引用与原始字段相同的数组类实例。修改原始文件会破坏不变量,反之亦然。 他使用了自定义Stack实现的例子,我使用的是一个简单的Student类 class Student实现Cloneable { private String name; ..
发布时间:2019-01-08 13:05:37 Java相关

如何制作对象的防御性副本?

如何制作包含不可变对象中可变字段的Mutable对象的防御性副本? class ImmutableObject { 私有final MutableObject immutable_field; ImmutableObject(MutableObject y){ this.immutable_field = y; } } class MutableObject { ..
发布时间:2019-01-07 16:27:59 Java相关

Builder模式:首选哪种变体?

我正在阅读Effective Java书籍,并为我未来的参考创建笔记, i遇到了Builder Pattern。 我明白它是什么,它是如何使用的。在这个过程中,我创建了两个构建模式的示例变体。 我需要帮助列出差异和每个人的优势? 嗯我当然注意到,示例1 暴露的方法较少,限制较少, 更通用,允许更灵活地使用。 请指出我错过的其他事情? 示例1 package i ..
发布时间:2018-12-28 15:09:26 Java相关

Java:何时在序列化期间添加readObjectNoData()?

我正在阅读“Effective Java”中的序列化章节。我试图理解书中的以下段落。 如果你实现一个具有可序列化的实例字段的类 和可扩展的,你应该注意的是谨慎。如果 类 有不变量,如果它的实例字段 是 初始化为它们的默认值(整数类型为0,boolean为 false,并且null为对象引用类型),你 必须将 这个readObjectNoData方法添加到类中: //有 ..
发布时间:2018-12-25 22:17:22 Java相关

为什么公共静态最终数组是安全漏洞?

有效的java说: //潜在的安全漏洞! static public final Thing [] VALUES = {...}; 有人可以告诉我什么是安全漏洞吗? 解决方案 声明静态最终公开字段通常是类常量的标志。对于原始类型(整数,双精度等)和不可变类,如字符串和 java.awt.Color ,它完全没问题。对于数组,问题是即使数组引用是常量,数组的元素仍然可以更改 ..
发布时间:2018-12-25 21:08:05 Java相关

Java:为什么不将clone()用于防御性复制?

在Effective Java(第7章)中,它说 另请注意,我们没有使用Date的克隆方法来制作防御性副本。因为Date是非最终的,所以不能保证clone方法返回一个类为java.util.Date的对象:它可能返回一个专门为恶意恶作剧设计的不可信子类的实例。例如,这样的子类可以在创建私有静态列表时记录对每个实例的引用,并允许攻击者访问该列表。这将使攻击者在所有实例中自由统治。为了防止这种攻 ..
发布时间:2018-12-20 23:27:32 Java相关

Joshua Bloch在有效的java中建议如何在Java中使用缓存哈希码?

我有以下来自Joshua Bloch的有效java代码(第9章,第3章,第49页) 如果a class是不可变的,并且计算哈希代码的成本是 很重要,您可以考虑在对象 中缓存哈希代码,而不是每次请求时重新计算它。如果您认为 将此类型的大多数对象用作哈希键,那么 应该在创建实例时计算哈希码。 否则,您可能会在第一次调用 hashCode时选择懒惰地初始化它(第71项)。目前尚不清楚我 ..
发布时间:2018-12-06 14:15:30 Java相关

在equals和hashcode方法中使用自动生成的hibenate实体对象的id

可爱的equals和hashcode,所有的理论都是 here 和也此处 我决定在一些hibernate实体/域对象中使用equals()和hashcode()中的自动生成的id。然而,许多网站表示,你永远不应该这样做,因为在第一次存在对象的过程中存在持久化对象到数据库的风险比较或使用散列码。 我的观点是,在大多数使用情况下,这比任何其他字段更改的可能性要小得多。 个别域对象的i ..
发布时间:2018-06-07 18:13:49 J2EE

Class.asSubclass签名

我的问题很理论......这是Class.asSubclass的签名( Javadoc ): public asSubclass(Class clazz) 为什么在返回类型中使用通配符泛型?根据我对泛型的理解,更好的签名可能是: pre $ public 类< U> asSubclass(Class c ..
发布时间:2018-04-21 20:07:13 其他开发

什么是“递归类型绑定”在泛型中是什么意思?

书中有这样的一段: 尽管相对较少,但允许类型参数受涉及该类型参数本身的某个表达式限制的情况是允许的。这就是所谓的递归类型绑定。 和这个: //使用递归类型绑定来表达相互可比性 public static> T max(List list){...} 什么是递归类型绑定,上述代码是否有助于实现相互可比 ..
发布时间:2018-04-21 19:26:08 其他开发