简体   繁体   中英

compiling code that uses Class.isAssignableFrom() with and without a generics aware compiler

I have some Java code that needs to compile with current generics aware compilers as well as with older or exotic compilers that don't know about generics (yet). I managed to get almost all the code compile fine and without warnings except for the rare occasions where Class.isAssignableFrom() is used.

This example compiles with either compiler but generics aware compilers give a warning like:

"Type safety: The method isAssignableFrom(Class) belongs to the raw type Class. References to generic type Class should be parameterized"

public static boolean isType( Class type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}

This gets rid of the warning but of course doesn't compile without generics:

public static boolean isType( Class<?> type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}

I managed to fix some cases by substituting this against Class.isInstance() and some others using MyClass.class.isAssignableFrom( clazz ) which compiles fine everywhere but a few cases are left where I really need Class.isAssignableFrom() to be invoked on a arbitrary class object. @SuppressWarnings isn't possible to use either since it's also only understood by compilers aware of Java 1.5 extensions and newer.

So any ideas how to fix this or do I just have to live with the warnings?

Live with that warning, or use conditional compiling (depends on the build tool you use)... Although I don't think it is a good practice trying to support two versions of Java which aren't compatible. And they may be worse things than just warnings on compiling.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM