18得票3回答
Class.asSubclass 签名

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

17得票2回答
Effective Java 条款47:了解并使用你的类库 - 有缺陷的随机整数方法示例

在Josh提供的例子中,展示了一种存在缺陷的随机方法,该方法可生成一个给定上限n的正随机数。我不理解他所谈到的两种缺陷。 书中的方法如下:private static final Random rnd = new Random(); //Common but deeply flawed s...

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

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

14得票2回答
说整型枚举模式是编译时常量是什么意思?

这段内容来自《Effective Java》。 使用int枚举模式的程序是脆弱的。因为int枚举是编译时常量,所以它们被编译进使用它们的客户端中。 有人能解释一下为什么int枚举模式被称为编译时常量,并且“编译进客户端”是什么意思吗? 以下是这种常量的示例:public stat...

13得票2回答
我们在Builder模式中需要一个.build()方法吗?

我有一个关于Effective Java中涉及的"构建器模式"的问题。在正确实现该模式时,我们需要一个.build()方法吗?例如,假设我们有以下类: public class CoffeeDrink { private int numEspressoShots; priv...

13得票4回答
将此对象强制转换为通用类型的工作原理是什么?

我的理解是泛型类型是不变的,所以如果我们有B作为A的子类型,那么List&lt;B&gt;与List&lt;A&gt;没有关系。因此,在List&lt;A&gt;和List&lt;B&gt;上进行强制转换是行不通的。 从《Effective Java第三版》中,我们有以下代码片段: // ...

13得票4回答
我们是否需要优先选择构造函数而不是静态工厂方法?如果是这样,那么什么情况下需要呢?

我正在阅读Joshua Bloch的Effective Java,迄今为止它真的名副其实。第一项就充分证明了 静态工厂方法 优于 构造方法。以至于我开始质疑传统的构造方法的有效性 :) 以下是书中总结的利弊: 优点: 它们有名称! 我们拥有完全的实例控制(单例,性...

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

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

12得票3回答
有效的Java条目17:重写removeRange()如何提高性能?

在Joshua Bloch的书《Effective Java》中,讨论了一个类如何提供"谨慎选择的受保护方法"以便将其内部工作暴露出来。 作者随后引用了AbstractList.removeRange()中的文档: 此方法由这个列表及其子列表上的clear操作调用。重写此方法以利用列表...

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...