为什么在Java中使方法易变?

拉吉:

为什么要使方法变得不稳定?使方法变得易变如何改变方法的行为?

编辑:我对由类对象(Java反射)返回的Method对象执行了toString()。返回字符串具有针对方法名称的volatile修饰符以及公共可见性和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);
科旺:

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

public static final int VOLATILE = 0x00000040;

和下面的方法位:

static final int BRIDGE = 0x00000040;

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

如果您致电例如Modifier.toString(int)致电,如文档所示:

请注意,要对已知种类的实体(例如构造函数或方法)执行此类检查,请首先将的自变量toString参数相匹配,并使用来自类似constructorModifiers方法的掩码methodModifiers

那么您将得到不适当的输出(包括桥接方法,它是为例如协变量返回类型自动生成的,显示为“ volatile”)。

至少当前的OpenJDK Method.toString()对此进行了过滤。如果不是,则可能是您在使用其他版本或较旧版本的JDK,但无法正确执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Final字段不能在Java中易变?

为什么PSR-7响应的身体易变?

为什么我们在Java中使用clone()方法?

为什么在Java方法名称中使用数字是错误的?

为什么在Java中使用静态助手方法不好?

什么是静态方法,为什么在 Java 的 Display 类中使用它

为什么在pytorch中使用to()方法?

为什么在BluetoothChat中使用getBytes()方法

为什么我可以在方法中使用“ this”

为什么IPEndPoint易变?有一个不变的版本吗?

为什么+在Java中使用Strings?

为什么在Java中使用HashMap失败?

为什么在Java中使用堆内存

为什么在Java EE中使用CDI

为什么许多Java Stream接口方法在参数中使用下界通配符而不是通用类型?

在Java 7中使用方法重载时,为什么不自动装箱否决varargs?

为什么在Java中使用递归方法时出现未支持的类版本错误?

导入类后,为什么不能在java.io.PrintStream中使用print()或println()方法?

为什么在MediaPlayer静态方法create()中使用的Uri抛出java.lang.IllegalArgumentException?

当对象实际引用数组时,为什么Java在方法声明中使用Object而不是T []

为什么不能在Java类的main方法中使用它?

Java中的易变变量

Java中使用的方法“.getChildren()”是什么?

为什么我的样板Java桌面应用程序JFrame在main方法中使用EventQueue.invokeLater?

为什么即使我在 Java 中使用 close() 方法也会收到“资源泄漏:'<未分配的可关闭值>'”错误?

为什么要在main方法中使用SwingUtilities.invokeLater?

无法在方法中使用我的小部件Qcombobox,为什么?

为什么我不能在界面中使用默认方法?

为什么在Julia中使用内部构造方法?