gpt4 book ai didi

java - Java 反射中附加到对象方法的 270 多个修饰符

转载 作者:行者123 更新时间:2023-12-02 11:34:47 30 4
gpt4 key购买 nike

我正在学习 Java Reflection,并且正在研究 java.lang.Reflection 类。这是我在名为 Driver

的类中编写的代码
Method[] method = Dummy.class.getMethods();

System.out.println("MEthods");
for (int i = 0; i < method.length; i++) {
System.out.println("Name: " + method[i].getName());
System.out.println("Declaring Class: " + method[i].getDeclaringClass());
System.out.println("ToGenericString: " + method[i].toGenericString());
System.out.println("Modifiers: " + method[i].getModifiers());
System.out.println();
}

这是虚拟类

public class Dummy {
public int b(){return 0;}
}

我会得到如下输出

Name: b
Declaring Class: class Dummy
ToGenericString: public int Dummy.b()
Modifiers: 1

Name: hashCode
Declaring Class: class java.lang.Object
ToGenericString: public native int java.lang.Object.hashCode()
Modifiers: 257

Name: notifyAll
Declaring Class: class java.lang.Object
ToGenericString: public final native void java.lang.Object.notifyAll()
Modifiers: 273

//etc

我的问题是:为什么对象继承的方法如 wait()notify() hashcode() 等有超过 270 多个修饰符,而我的方法 b() 只有 1,有趣的是 toString() 也有 1

最佳答案

getModifiers 的结果不是数字而是代码(特别是位集)。

每个修饰符都有一个值,例如:- 公共(public)是1- final 为16- native 是 256

您必须将它们与按位或运算结合起来(在本例中类似于加法运算)。

要获取完整的修饰符列表,请阅读 Modifier 的文档和源代码.

  • toString 是公共(public)的 (1) => 1
  • 哈希码是公共(public) (1) 和 native (256) => 257
  • notifyAll 是公开的 (1)、最终的 (16) 和原生的 (256) => 273

关于java - Java 反射中附加到对象方法的 270 多个修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024058/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com