Once the use of the Java 1.5 SDK is prevalent, no Java developer will be able to avoid using generics; they are used in the collections classes, the Comparable interface, and in the reflections API. All in all, by making contracts more declarative and simplifying and clarifying code, generics should reduce runtime typing errors and improve the understandability of code and APIs. However, because they add additional complexity to the Java language, it will be a challenge for both experienced and novice Java developers, especially those who are new to object oriented programming, to take full advantage of the benefits while avoiding the potential pitfalls that generics bring.