Here's another (probably weak) use case for returning <T extends AbstractCas> kinds of things: If you have part of the code which collects views and some of these views use one form of the AbstractCas (e.g. CASImpl) and others use the JCas form, it would be nice to be able to put these two uses into a collection (of AbstractCas) - which is the kind of thing AbstractCas was trying to do, I believe.
I never really understood the reason why AbstractCas exists, it only has a release method, but CAS and JCas have many methods in common. Why are they not declared in AbstractCas ?
The way its now AbstractCas is nearly useless expect for cas pooling or so. What was the reason to not move up the common methods when AbstractCas was introduced ? Jörn