That is because .NET has a fundamentally different (IMO better) generics infrastructure, where information about the generic type signature is retained and can be used at runtime. Although this *can* be done in
Java, it's hard. For example, the ApplicationListener interface in Spring 3 works with event publishers to use runtime type reflection about the generic signature of a class implementing ApplicationListener to determine which events it's interested in.
peter
Author, Spring Security 3 (the Book), Packt Publishing, 2010
SCJP, OCP