# Java Notes: Downcasting

## Collections of Objects - The Dark Side

There are a lot of things to like about Java Collections, but there are some weak aspects too.

- Slow - No primitives. The elements of all Collections data structures (but not arrays) must be Object or a subclass of Object. Internally, the elements are all upcast to Objects.
- Ugly - Downcast on the way out.
- Dangerous - Make No Type Mistake..
- All methods return a fixed type, so the only type that can work for Vector and others is Object, the anscestor class of all classes. So you have to "downcast" the Object you get back from Vector to the type you put in. Then the compiler will recognize the methods of that type. In principle the compiler could check subclasses for an appropriate method, but it only looks up the inheritance chain because that has no execution-time cost. Downcasting always checks the real class to see if the casting is legal -- after all, you could potentially add different types to a Vector. The new version of Java (known variously as Tiger, 1.5, or 5) implements "generics" (like C++ templates), which automatically do a lot of extra checking. It's expected to be released at the end of the month. So the answer in code to your question is this.outputS += ((YourType)notesV.get(ix)).printOut();