Richtige Weg, um überprüfen Sie die Java-Reflection-Aufrufe?
Ich gepostet eine Frage, die Letzte Nacht über die Java-Reflection und bin zu entdecken, dass der compiler Warnungen dieser morgen.
C:\javasandbox\reflection>javac ReflectionTest.java
Note: ReflectionTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\javasandbox\reflection>javac -Xlint:unchecked ReflectionTest.java
ReflectionTest.java:17: warning: [unchecked] unchecked call to
getDeclaredMethod(java.lang.String,java.lang.Class<?>...) as a member of the raw
type java.lang.Class
myMethod = myTarget.getDeclaredMethod("getValue");
^
ReflectionTest.java:22: warning: [unchecked] unchecked call to
getDeclaredMethod(java.lang.String,java.lang.Class<?>...) as a member of the raw
type java.lang.Class
myMethod = myTarget.getDeclaredMethod("setValue", params);
^
2 warnings
Gibt es einen "richtigen" Weg, um zu überprüfen diese Methoden zurückgegeben? (d.h. gibt es eine richtige Weg, um loszuwerden, diese Warnungen?)
Source code:
import java.lang.reflect.*;
class Target {
String value;
public Target() { this.value = new String("."); }
public void setValue(String value) { this.value = value; }
public String getValue() { return this.value; }
}
class ReflectionTest {
public static void main(String args[]) {
try {
Class myTarget = Class.forName("Target");
Method myMethod;
myMethod = myTarget.getDeclaredMethod("getValue");
System.out.println("Method Name: " + myMethod.toString());
Class params[] = new Class[1];
params[0] = String.class;
myMethod = myTarget.getDeclaredMethod("setValue", params);
System.out.println("Method Name: " + myMethod.toString());
} catch (Exception e) {
System.out.println("ERROR");
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern
zu
Die im Grunde bedeutet, "ich weiß, es ist generisch, aber ich weiß nichts über die Art argument." Sie sind semantisch äquivalent, aber der compiler kann sagen, der Unterschied. Weitere Informationen finden Sie in der entsprechenden Java Generics FAQ-Eintrag ("Was ist der Unterschied zwischen der unbounded wildcard-Instanziierung und der raw-Typ?").
raw types
Fehler in der ersten ZeileClass
, sondern freut sich mit der zweiten ZeileClass<?>
.