为什么方法会变得不稳定?如何使方法volatile改变方法的行为?
编辑:我在类对象(Java反射)返回的Method对象上执行了toString().返回字符串具有针对方法名称的volatile修饰符以及公共可见性和void返回类型.研究仅得出有关物业挥发性的信息.这就是我问这个问题的原因.
方法声明是:
public volatile org.osmdroid.api.IGeoPoint org.osmdroid.views.MapView.getMapCenter()
Run Code Online (Sandbox Code Playgroud)
反射方法的代码:
public static class Test {
public static void showMethods(Object target) {
Class<?> clazz = target.getClass();
for (Method method : clazz.getMethods()) {
if (method!=null) {
System.out.println(method.toString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
Test.showMethods(mapView);
Run Code Online (Sandbox Code Playgroud)
Cow*_*wan 39
我强烈怀疑你所看到的是JLS为字段定义以下位的事实的副作用:
public static final int VOLATILE = 0x00000040;
Run Code Online (Sandbox Code Playgroud)
以及方法的以下位:
static final int BRIDGE = 0x00000040;
Run Code Online (Sandbox Code Playgroud)
请注意,它们具有相同的值(相同的位对于方法和字段具有不同的含义).
如果你Modifier.toString(int)
没有打电话,如文件所示:
请注意,要对已知类型的实体(例如构造函数或方法)执行此类检查,请首先
toString
使用类似于constructorModifiers
或的方法使用适当的掩码参数methodModifiers
.
然后你会得到不合适的输出(包括桥接方法,自动生成例如协变返回类型,显示为'volatile').
至少目前的OpenJDK Method.toString()
过滤掉了这个; 如果你的不是,也许你正在使用不正确的JDK版本.
Jon*_*eet 16
你不能.volatile
仅是字段的有效修饰符.
你读了...吗
http://jeremymanson.blogspot.com/2008/11/what-volatile-means-in-java.html
只是为了完成答案:
正如其他人都指出的那样:你不能让方法变得不稳定.
归档时间: |
|
查看次数: |
7569 次 |
最近记录: |