Java. How to prohibit usage of raw generic type?
Hi I'm writing the reporting system and want to make end-user specify type if he extends my class.
class A <T extends C>
{...}
class B extends A /开发者_JS百科/ Compile error
{...}
class B extends A<D> // Compile error
{...}
class B extends A<C> // Success
Is that possible?
class B extends A // Compile error
No, for the sake of backwards compatibility, generics in Java are optional. You cannot force the programmer to use them. This will only generate a warning ("do not use raw types").
class B extends A<D> // compile error
If they do use generics, they have to be correct, though. In the case that D does not match the specification, this will be a compiler error.
@Thilo is right.
I'd just like to add that it is a bad idea to try to force people to use your classes in a particular way. They may have a good reason for using your code differently to the way that you intend. If you try to force a particular usage pattern, you may end up causing people to resort to horrible hacks, to fork your classes, or to simply go away and implement their own.
This is a job for your IDE or for external quality management tools (like Findbugs). You can configure Eclipse to treat unchecked
warnings as error (and you can probably do the same with most IDEs). Or you can configure Findbugs to make your build fail in the same type of error.
Yes, those solutions leave the responsability to the user of your API to do the right thing, but it is most probably the right thing to do.
精彩评论