gpt4 book ai didi

java - Java中没有依赖静态函数定义的强制编译事件

转载 作者:行者123 更新时间:2023-11-30 05:51:48 25 4
gpt4 key购买 nike

由于无论定义如何存在,静态函数调用都被转换为静态调用字节码...是否有某种方法可以强制静态函数的调用者成功编译,即使目标函数和类不存在还没有?

我希望能够编译对尚不存在的函数的调用。我需要告诉编译器相信我,在运行时,我会在类路径中正确定义它们,所以现在继续编译吧。

有办法吗?

最佳答案

反射(reflection)是的,但不是通过常规电话。

调用需要字符串池中的一个条目,其中包括方法名称​​和参数类型,因此编译器需要能够决定方法的签名。

invokestatic <method-spec>

<method-spec> is a method specification. It is a single token made up of three parts: a classname, a methodname and a descriptor. e.g.

 java/lang/System/exit(I)V

is the method called "exit" in the class called "java.lang.System", and it has the descriptor "(I)V" (i.e. it takes an integer argument and returns no result).

考虑

AClass.aStaticMethod(42)

AClass一无所知, 它可以是对任何一个的调用

  1. AClass.aStaticMethod(int)
  2. AClass.aStaticMethod(int...)
  3. AClass.aStaticMethod(long)
  4. AClass.aStaticMethod(long...)
  5. 同上floatdouble
  6. AClass.aStaticMethod(Integer)
  7. AClass.aStaticMethod(Number)
  8. AClass.aStaticMethod(Comparable<? extends Integer>)
  9. AClass.aStaticMethod(Object)
  10. AClass.aStaticMethod(Serializable)

可能还有其他一些我错过的。

关于java - Java中没有依赖静态函数定义的强制编译事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443368/

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