13得票5回答
Java中任何对象的编译时类型与运行时类型有什么区别?

什么是Java中任何对象的编译时类型和运行时类型之间的区别?我正在阅读Effective Java一书,Joshua Bloch在第26条目中多次提到数组实例的编译时类型和运行时类型,主要是为了描述有时抑制转换警告是安全的。 // Appropriate suppression of unc...

9得票3回答
乔舒亚·布洛赫所说的“extra-linguistic”是什么意思?

从这篇Artima关于clone和copy constructor的文章中可以了解到: 对象的clone方法非常棘手。它基于字段副本,并且它是“超语言级别的”。它在不调用构造函数的情况下创建一个对象。无法保证它能够保留构造函数所建立的不变式。多年来,由于如果只重复调用super.clone直...

35得票3回答
"递归类型限定"在泛型中是什么意思?

我正在阅读《Effective Java[第27项]》中的有关泛型的章节。 书中有这样一段话: 允许某个类型参数被某个表达式所限制,而该表达式涉及到该类型参数本身,这种情况虽然相对较少,但也是可以的。这就是所谓的递归类型限定(recursive type bound)。 还有这句话:...

18得票3回答
Class.asSubclass 签名

我的问题比较理论化...这是 Class.asSubclass 的签名 (Javadoc): public <U> Class<? extends U> asSubclass(Class<U> clazz) 为什么在返回类型中使用通配符泛型?根据我对泛...

12得票2回答
为什么Joshua Bloch在Effective Java中调整栈大小时使用2*size + 1?

这是我所谈论的代码:public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; pub...

9得票3回答
Java模型对象设计

我一直在阅读《Effective Java》!书中最鼓舞人心的章节之一是不可变对象/构建器部分,在这里Bloch写了关于“构建器” - 类而不仅仅是POJO的内容。 注意:我在这里谈论的是模型对象:例如文章或汽车。 这是我以前编写这些对象的方式: public class Car { ...

7得票1回答
乔书记的《Effective Java》中的Equals方法

请查看 Joshua Bloch 的《Effective Java》的链接。在第二段中,作者说: The class is private or package-private, and you are certain that its equals method will never b...

90得票5回答
什么是AssertionError?在哪些情况下应该在自己的代码中抛出它?

在《Effective Java 第二版》的第 2 条中,有这段代码片段,其中作者想禁止对象的空初始化。class Example { private Example() { throw new AssertionError(); } } 这里让我困惑的是抛出异...

17得票3回答
为什么在Collections.max()方法中需要有限制通配符<? extends T>?

我曾经读过 Joshua Bloch 写的很棒的《Effective Java》。但是书中有一个例子我还不是很清楚,它出自泛型章节,确切地说是 "Item 28: Use bounded wildcards to increase API flexibility"。 在这个条目中,展示了如何...

8得票4回答
Java中如何实现哈希码缓存?这是Joshua Bloch在《Effective Java》一书中提出的建议。

我有以下来自Joshua Bloch的《Effective Java》(第3章,第49页)的代码片段: 如果一个类是不可变的,并且计算哈希码的成本很高,你可以考虑在对象中缓存哈希码,而不是每次请求时重新计算。如果你认为这种类型的大多数对象将被用作哈希键,则应当在实例创建时计算哈希码。否则,...