Jörn Kottmann wrote: > Marshall Schor wrote: >> A user had written this: >> >> public static <T extends Annotation> Iterator<T> annotationsIterator( >> JCas aJCas, int type) { >> return aJCas.getAnnotationIndex(type).iterator(); // fails, cannot >> convert from FSIterator<AnnotationFS> to Iterator<T> >> } >> >> This compile-time error can be eliminated by changing the generification >> of AnnotationIndex as follows: >> >> Currently AnnotationIndex is defined: >> public interface AnnotationIndex extends FSIndex<AnnotationFS> >> >> If the definition is changed to: >> public interface AnnotationIndex <T extends AnnotationBaseFS> extends >> FSIndex<T> >> then the user's code above no longer gives a compile-time error. (It >> does give a warning though - an unchecked conversion is needed). >> >> This change makes AnnotationIndex, itself, a generic type, with a type >> parameter indicating the type the index is over. >> >> Is this a correct improvement? >> > In my opinion it must be > > public interface AnnotationIndex <T extends AnnotationFS> extends > FSIndex<T> > > because the AnnotationIndex interface promises to only contain > uima.tcas.Annotations and if T extends AnnotationBaseFS it could > be somthing else, right ?
Yes, AnnotationBaseFS has no built-in support in UIMA, afaik. The annotation indexes only work on AnnotationFSs. BTW, I'm getting a "unnecessary cast" warning on line 169 of AnnotationIndexImpl, in case anybody goes in there to make those changes. --Thilo > > Jörn > >