为什么要让一个方法在java中易失性?

2022-09-02 14:19:34

为什么一种方法会变得不稳定?使方法易失性如何改变方法的行为?

编辑:我对类对象返回的方法对象(Java Reflection)做了一个toString()。返回字符串具有针对方法名称的可变修饰符以及公共可见性和 void 返回类型。研究仅产生有关属性挥发性的信息。这就是我问这个问题的原因。

方法声明为:

public volatile org.osmdroid.api.IGeoPoint org.osmdroid.views.MapView.getMapCenter()

反射方法的代码:

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());
            }
        }
    }
}

方法调用:

Test.showMethods(mapView);

答案 1

我强烈怀疑你所看到的是JLS为字段定义以下位这一事实的副作用:

public static final int VOLATILE = 0x00000040;

和以下位的方法:

static final int BRIDGE = 0x00000040;

请注意,它们具有相同的值(相同的位对于方法和字段具有不同的含义)。

如果您致电例如 没有,正如文档所建议的那样:Modifier.toString(int)

请注意,要对已知类型的实体(如构造函数或方法)执行此类检查,请首先使用方法(如 或 )中的相应掩码的参数。toStringconstructorModifiersmethodModifiers

然后你会得到不合适的输出(包括桥接方法,自动生成例如协变返回类型,显示为“易失性”)。

至少目前的OpenJDK过滤掉了这一点;如果你的不是,也许你正在使用不同或更旧版本的JDK,它没有正确地做到这一点。Method.toString()


答案 2

你不能。 只是字段的有效修饰符。volatile


推荐