Synopses & Reviews
This comprehensive guide shows you how to master the most importantchanges to Java since it was first released. Generics and the greatlyexpanded collection libraries have tremendously increased the power ofJava 5 and Java 6. But they have also confused many developers whohaven't known how to take advantage of these new features.
Java Generics and Collections covers everything from the mostbasic uses of generics to the strangest corner cases. It teaches youeverything you need to know about the collections libraries, so you'llalways know which collection is appropriate for any given task, andhow to use it.
Topics covered include:
- Fundamentals of generics: type parameters and generic methods
- Other new features: boxing and unboxing, foreach loops, varargs
- Subtyping and wildcards
- Evolution not revolution: generic libraries with legacy clients andgeneric clients with legacy libraries
- Generics and reflection
- Design patterns for generics
- Sets, Queues, Lists, Maps, and their implementations
- Concurrent programming and thread safety with collections
- Performance implications of different collections
Generics and the new collection libraries they inspired take Java to anew level. If you want to take your software development practice toa new level, this book is essential reading.
Philip Wadler is Professor of Theoretical Computer Science at theUniversity of Edinburgh, where his research focuses on the design ofprogramming languages. He is a co-designer of GJ, work thatbecame the basis for generics in Sun's Java 5.0.
Maurice Naftalin is Technical Director at Morningside Light Ltd., a software consultancy in the United Kingdom. He has most recently served as an architect and mentor at NSB Retail Systems plc, and as the leader of the client development team of a major UK government social service system.
"A brilliant exposition of generics. By far the best book on thetopic, it provides a crystal clear tutorial that starts with thebasics and ends leaving the reader with a deep understanding of boththe use and design of generics."
Gilad Bracha, Java Generics Lead, Sun Microsystems
Java Generics was probably the most important feature added to the Java Language for Java 5.0. This book, written by one of the designers of generics, is a thorough explanation of how to use generics, and particularly, the effect this facility has on the way you use collections.
Generics and collections allow for greater reuse of source code. While the benefits are great, it takes extra effort for developers to generify code. This book explains why the effort is well worth the gains and teaches Java developers how to use a generic library, how to write a generic library and specify collection types, and how to generify an existing library of legacy code. "Java Generics and Collections" provides helpful hints and exercises that show the reader how to avoid the pitfalls of generics and speed up their Java development process.
This book, written by one of the designers of generics, is a thorough explanation of how to use generics, and particularly, the effect this facility has on the way developers use collections.
About the Author
Maurice Naftalin is Director of Software Development at Morningside Light Ltd., a software consultancy in the United Kingdom. Maurice consults mainly in object-oriented technologies and teaches Java classes part-time at Learning Tree. He has three decades' experience as a programmer, team leader, and commercial trainer.
Philip Wadler is a professor of theoretical computer science at the University of Edinburgh, Scotland, where his research focuses on functional and logic programming. He co-authored the Generic Java standard that became the basis for generics in Sun's Java 5.0 and also contributed to the XQuery language standard base. Professor Wadler received his Ph.D., in computer science from Carnegie-Mellon University and co-wrote "Introduction to Functional Programming" (Prentice-Hall).
Table of Contents
Preface; Obtaining the Example Programs; How to Contact Us; Conventions Used in This Book; Using Code Examples; Safari® Books Online; Acknowledgments; Part I: Generics; Chapter 1: Introduction; 1.1 Generics; 1.2 Boxing and Unboxing; 1.3 Foreach; 1.4 Generic Methods and Varargs; 1.5 Assertions; Chapter 2: Subtyping and Wildcards; 2.1 Subtyping and the Substitution Principle; 2.2 Wildcards with extends; 2.3 Wildcards with super; 2.4 The Get and Put Principle; 2.5 Arrays; 2.6 Wildcards Versus Type Parameters; 2.7 Wildcard Capture; 2.8 Restrictions on Wildcards; Chapter 3: Comparison and Bounds; 3.1 Comparable; 3.2 Maximum of a Collection; 3.3 A Fruity Example; 3.4 Comparator; 3.5 Enumerated Types; 3.6 Multiple Bounds; 3.7 Bridges; 3.8 Covariant Overriding; Chapter 4: Declarations; 4.1 Constructors; 4.2 Static Members; 4.3 Nested Classes; 4.4 How Erasure Works; Chapter 5: Evolution, Not Revolution; 5.1 Legacy Library with Legacy Client; 5.2 Generic Library with Generic Client; 5.3 Generic Library with Legacy Client; 5.4 Legacy Library with Generic Client; 5.5 Conclusions; Chapter 6: Reification; 6.1 Reifiable Types; 6.2 Instance Tests and Casts; 6.3 Exception Handling; 6.4 Array Creation; 6.5 The Principle of Truth in Advertising; 6.6 The Principle of Indecent Exposure; 6.7 How to Define ArrayList; 6.8 Array Creation and Varargs; 6.9 Arrays as a Deprecated Type?; 6.10 Summing Up; Chapter 7: Reflection; 7.1 Generics for Reflection; 7.2 Reflected Types are Reifiable Types; 7.3 Reflection for Primitive Types; 7.4 A Generic Reflection Library; 7.5 Reflection for Generics; 7.6 Reflecting Generic Types; Chapter 8: Effective Generics; 8.1 Take Care when Calling Legacy Code; 8.2 Use Checked Collections to Enforce Security; 8.3 Specialize to Create Reifiable Types; 8.4 Maintain Binary Compatibility; Chapter 9: Design Patterns; 9.1 Visitor; 9.2 Interpreter; 9.3 Function; 9.4 Strategy; 9.5 Subject-Observer; Part II: Collections; Chapter 10: The Main Interfaces of the Java Collections Framework; Chapter 11: Preliminaries; 11.1 Iterable and Iterators; 11.2 Implementations; 11.3 Efficiency and the O-Notation; 11.4 Contracts; 11.5 Collections and Thread Safety; Chapter 12: The Collection Interface; 12.1 Using the Methods of Collection; 12.2 Implementing Collection; 12.3 Collection Constructors; Chapter 13: Sets; 13.1 Implementing Set; 13.2 SortedSet and NavigableSet; 13.3 Comparing Set Implementations; Chapter 14: Queues; 14.1 Using the Methods of Queue; 14.2 Implementing Queue; 14.3 BlockingQueue; 14.4 Deque; 14.5 Comparing Queue Implementations; Chapter 15: Lists; 15.1 Using the Methods of List; 15.2 Implementing List; 15.3 Comparing List Implementations; Chapter 16: Maps; 16.1 Using the Methods of Map; 16.2 Implementing Map; 16.3 SortedMap and NavigableMap; 16.4 ConcurrentMap; 16.5 ConcurrentNavigableMap; 16.6 Comparing Map Implementations; Chapter 17: The Collections Class; 17.1 Generic Algorithms; 17.2 Collection Factories; 17.3 Wrappers; 17.4 Other Methods; Colophon;