我昨晚发布了一个关于Java Reflection的问题,并且今天早上发现了编译器警告.
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
Run Code Online (Sandbox Code Playgroud)
是否有"正确"的方法来检查这些返回的方法?(即有没有正确的方法来摆脱这些警告?)
源代码:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 41
更改
Class myTarget = Class.forName("Target");
Run Code Online (Sandbox Code Playgroud)
至
Class<?> myTarget = Class.forName("Target");
Run Code Online (Sandbox Code Playgroud)
这基本上意味着,"我知道它是通用的,但我对类型论证一无所知." 它们在语义上是等价的,但编译器可以区分它们.有关更多信息,请参阅相关的Java Generics FAQ条目("无界通配符实例和原始类型之间有什么区别?").
| 归档时间: |
|
| 查看次数: |
5452 次 |
| 最近记录: |