uima-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Florian Leitner <fleit...@cnio.es>
Subject generics and type safety in UIMA AEs
Date Mon, 06 Aug 2012 09:51:24 GMT
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 <fleitner.cnio@gmail.com>

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


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message