|
Enhancements in
|
Reflection |
java.lang.Class were generified:
getInterfaces(),
getClasses().
getConstructors().
getMethod(String, Class...),
getConstructor(Class...),
getDeclaredClasses(),
getDeclaredConstructors(),
getDeclaredMethod(String, Class...), and
getDeclaredConstructor(Class...).
As a result, code which uses these methods now produces warnings during
compilation.
For example, consider the following code which invokes
getDeclaredMethod():
import java.lang.reflect.Method;
public class Warning {
void m() {
try {
Warning warn = new Warning();
Class c = warn.getClass();
Method m = c.getDeclaredMethod("m");
} catch (NoSuchMethodException x) {
x.printStackTrace();
}
}
}
$ javac Warning.java
Note: Warning.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
$ javac -Xlint:unchecked Warning.java
Warning.java:8: warning: [unchecked] unchecked call to getDeclaredMethod(java.lang.String,java.lang.Class<?>...) as a member of the raw type java.lang.Class
Method m = c.getDeclaredMethod("m");
^
1 warning
To remove the warning, the declaration of c should be modified
to include an appropriate generic type. In this case, the declation should be:
Class<?> c = warn.getClass();
Method.toString() and
Constructor.toString()
now correctly display the set of modifiers.
Array.newInstance(Class, int...)
is of variable arity.
|
Copyright © 2006
Sun Microsystems, Inc.
All Rights Reserved.
|
|