Tag: effective java

Java中任何对象的编译时类型与运行时类型有什么区别?

Java中任何对象的编译时间和运行时类型有什么区别? 我正在阅读有效的Java书籍,Joshua Bloch多次提及项目26中的编译时间类型和数组实例的运行时类型,主要是为了描述抑制强制转换警告有时是安全的。 // Appropriate suppression of unchecked warning public E pop() { if (size == 0) throw new EmptyStackException(); // push requires elements to be of type E, so cast is correct @SuppressWarnings(“unchecked”) E result = (E) elements[–size]; elements[size] = null; // Eliminate obsolete reference return result; } 在这里,作者在数组的上下文中讨论了这些不同类型的types 。 但是通过这个问题,我想了解compile time types与任何类型对象的run time […]

有效的Java作者:Joshua Bloch:第1项 – 静态工厂方法

我正在阅读Joshua Bloch的Effective Java ,我对Item1 Static Factory Method有疑问。 引用[布洛赫,第7页] 接口不能使用静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化的类中。 例如,Java Collections Framework提供不可修改的集合,同步集合等。 几乎所有这些实现都是通过一个不可实例化的类(java.util.Collections)中的静态工厂方法导出的。 返回对象的类都是非公共的。 好。 查看源代码时,我看到java.util.Collection接口和带有私有构造函数的java.util.Collections类(不可实例化的类)。 我看到不可实例化的类Collections具有所有静态方法,就像Bloch所说的那样。 但布洛赫说,我没有看到两个class级之间的联系 接口不能使用静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化的类中。 任何人都可以向我指出明显的事吗? 什么是他说的意思 返回对象的类都是非公共的 这是我获取java源代码的地方: http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collection.java?av = f

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

可爱的等号和哈希码,所有的理论都在这里 ,也在这里 我已经决定在我的许多hibernate实体/域对象中使用equals()和hashcode()中的自动生成的id。 但是,许多网站都说你不应该这样做,因为在比较或使用哈希码的过程中,第一次将对象持久存在数据库的风险。 我的观点是,在大多数用例中,这比任何其他字段更改都要小得多。 各个域对象在首次创建时会生成一次id,而几乎所有其他字段都有机会在正常业务流程中进行更改(即使可以更改唯一的用户名……)。 在我的许多域对象中,唯一的id几乎是唯一合适的字段(Person,Address,Pet,… Customer等等??组合字段是一个好主意,但从不使用自动生成的id,我想,不是好建议。 我错过了别的什么吗?

原始类型,无界外卡和generics中使用Object之间的区别是什么

我正在阅读有效Java中关于generics的章节。 帮我理解Set , Set和Set之间的区别? 以下段落摘自本书。 作为快速回顾, Set是一个参数化类型,表示可以包含任何类型对象的Set , Set是一个通配符类型,表示一个只能包含某些未知类型的对象的Set ,而Set是一个原始类型type,选择退出generics类型系统。 什么是“某种未知类型”? 是所有未知类型的Object类型? 在这种情况下, Set和Set之间的具体区别是什么?