Hmmm... but there, the logic for processing the items is held within the items themselves; in fact, I believe the types in question do also use this pattern. What I didn't make clear is that as I want to have different methods for processing the items in different ways, it seems they also need to apply some reasoning based on the type. This does end up happening in some fairly tight loops as well, so if there was a substantial cost I'd like to know.
I don't think that there is any performance difference. Profile your application before thinking about optimizing performance.
Quite. Must get myself better set up with profiling tools... later. For now, I'm certainly not worried about the cost of instanceof... In fact, I guess I was thinking from more of a design perspective after all. There were comments earlier that people seemed to think instanceof would only end up appearing as the result of some other bad design choice; I'm not so sure, and think maybe the pattern I ended up with is a reasonable one. Comments?