Just thought I'd start the discussion, seeing as the next release will
be Java 5 based.
Generics are subject to erasure, the compiler replaces them with type
casts and the type at the top of a hierarchy.
For example a method
public List<Apple> getApples();
Erases to:
public List getApples();
All operations on the returned lists will have type casts, casting
Object's from the List to Apple's.
This works well when the same compiler compiles all the code.
However it might not work when components are compiled separately.
One might argue that you could use an annotation or discover the type
from the bytecode, however the serialized form of MarshalledObject is
used to identify lookup services, bytecode is not involved.
If you use generic interfaces in your services, be careful, your clients
could use the type that would remain after erasure, then you must use
instanceof and typecast. But then in your service itself, it will still
use the generic unchecked type casts, since it was compiled separately,
so it'll break at some point.
However there is an occasion where you may use Generics in a Service
Interface. It's in the case where your type is always going to be the
same, as per the List<Apple> above, if Apple is used by all at compile
time, then the type is Guaranteed to be the same across all implementations.
So you can't use List<T> type generics, but you can be specific, with
List<Apple>
Cheers,
Peter.