Can someone help me out on two issues I have (ab-)using generics and thus 
having type safety issues when implementing UIMA AEs? I am having a hard time 
figuring out how to implement an AE without having to resort to "black box" 
casts. It seems I am not fully seeing how generics should be applied via the 
UIMA API.

1. The first issue is the (superfluous) need to cast an annotation type from 
the annotation index. Usually, if I get an iterator, the UIMA tutorials 
instruct us to write:

FSIterator<Annotation> annIt = jcas.getAnnotationIndex(myType).iterator();
 
This is works for non-generic pre-Java 5 code, but because I loose the type 
information I supplied to the method fetching the index, I end up with 
something like this:

MyAnnotationType ann = (MyAnnotationType) annIt.next();

This is not type safe because of relying on an (both unsafe and unnecessary!) 
cast. Can somebody please point out how to create type-safe annotation 
iterators? How can I instantiate an iterator other than the (non-generic) 
FSIterator<Annotation> in UIMA? Shouldn't there be something more Java-5-like 
in the API? E.g.:

FSIterator<MyAnnotationType> = 
jcas.getAnnotationTypeIndex(MyAnnotationType.class).iterator();

2. The second type safety issue I have is with external resources. Lets assume 
I've got an interface defining a StringMapResource<T>, i.e., much like in the 
UIMA tutorials, essentially a Map<String, T> using String keys and some generic 
values. Usually, in the initialize(UimaContext ctx) method, I'd write:

StringMapResource<MyType> smr = (StringMapResource<MyType>)  
ctx.getResourceObject(myResourceKey);

Obviously, this is not an effective way to implement generics, and the compiler 
complains about this unchecked "back box" casting I am doing when fetching the 
resource. Is there a type-safe way to initialize resources I am not aware of? 
Currently, because of this ugly cast, I even am forced to decorate my 
initialize(UimaContext) methods with hideous @SuppressWarnings("unchecked") 
annotations and I'd really like to get rid of these "warts". I'd assume there 
should be some method to instantiate a type-safe, generic resource factory in 
the UIMA API, right?

Thanks for any help!
Florian

-- 
Florian Leitner, PhD <[email protected]>

Structural Biology and BioComputing Programme
Spanish National Cancer Research Centre (CNIO)

Address: C/ Melchor Fernandez Almagro 3; E-28029 Madrid
Phone: +34 91 732 8000
Fax: +34 91 224 6980
Internet: http://www.cnio.es

Reply via email to