是否可以使用反射获取方法的方法的名称 Java?
如果我有这样的课程:
有没有办法找出这一点
使用命名的参数
, 那是类型
?
public class Whatever
{
public void aMethod/int aParam/;
}
有没有办法找出这一点
aMethod
使用命名的参数
aParam
, 那是类型
int
?
没有找到相关结果
已邀请:
14 个回复
董宝中
赞同来自:
所以对于你的课程
我们可以进行手动测试:
这应该需要
[aParam]
, 如果你通过了
对你的编译器的争论 Java 8.
为了 Maven 用户:
有关更多信息,请参阅以下链接:
http://docs.oracle.com/javase/ ... .html
http://openjdk.java.net/jeps/118
https://docs.oracle.com/javase ... .html
</string></string>
詹大官人
赞同来自:
获取参数名称
如果在编译期间启用调试信息,则可以进行。 看
https://coderoad.ru/6759880/
更多细节
否则,接收参数名称是不可能的
获取参数类型可以使用
为了为编辑器编写自动填充功能 /正如你在其中一个评论中所说的那样/ 有几种选择:
使用
,
,
等等。
使用
,
,
等等。
使用上面的组合 - 首先是非暴力类型,以及第二种原始类型。
根本不显示参数的名称 - 只有类型。
帅驴
赞同来自:
它正试图以几种不同的方式识别这些方法的名称。 如果类是用调试编译的,它可以通过读取类的字节代码来提取信息。
另一种方法是在汇编之后在类的字节代码中输入闭合静态成员,但在其放置之前 jar. 然后,他反映了在执行期间从类中提取此信息。
https://github.com/paul-hammant/paranamer
我使用这个图书馆有问题,但最终我设法努力工作。 我希望报告伴随的问题。
裸奔
赞同来自:
詹大官人
赞同来自:
代码
必须由汇编 Java 8 兼容编译器
使用存储正式参数名称的选项 /选项
-parameters
/.
然后这个代码片段应该有效:
</string>
董宝中
赞同来自:
http://java.sun.com/j2se/1.4.2 ... %2529
但是,您无法判断使用的参数的名称。
石油百科
赞同来自:
方法参数名称的巧合
到 URI 可变模板的名称可以
如果您的代码编译,则只能完成这一点
包括调试。 如果你有
如果不包括调试,则必须
指定模板的名称 URI
字段中的变量名称 @PathVariable
注释为了领带
允许的变量值 name to
方法参数。 例如:
取自
http://static.springsource.org ... pping
小姐请别说爱
赞同来自:
你可以
使用注释传输参数的名称并通过反射获取。
不是最纯粹的决定,但它就是这样。 某些Web服务确实可以保存参数的名称。 /即:部署 WSs 从 glassfish/.
帅驴
赞同来自:
http://docs.oracle.com/javase/ ... .html
, 这是一个为此设计的摘要。
喜特乐
赞同来自:
但是你可能会得到这样的清单:
["int : arg0"]
https://issues.apache.org/jira/browse/GROOVY-7423
因此,答案目前::
如果这是一个班级 Groovy, 那不是,你不能得到一个名字,但你必须将来能够做到这一点。
如果这是一个班级 Java, 编译下 Java 8, 你必须能够这样做。
也可以看看:
http://openjdk.java.net/jeps/118
https://docs.oracle.com/javase ... .html
对于每种方法,类似:
小明明
赞同来自:
https://i.stack.imgur.com/RSLra.png
龙天
赞同来自:
这里有一个很好的答案......
https://coderoad.ru/2729580/
靠近
@AdamPaynter
..
.
使用库 ASM. 我带来了一个展示你如何实现目标的示例。
首先,开始 pom.xml 与这些依赖关系。
然后这个课程应该做你想做的事。 只需称之为静态方法
.
以下是一个模块化测试的示例。
您可以找到一个完整的示例
https://github.com/danidemi/po ... d-asm
注意
我改变了一点源解决方案 @AdamPaynter, 为了使它适用于方法。 如果我理解正确,其解决方案仅适用于设计人员。
该解决方案不适用于方法
. 这是由于在这种情况下,返回的参数数量 ASM, 不同,但这是可以容易地纠正的。
</string></localvariablenode></string></string></methodnode></string>
窦买办
赞同来自:
http://forums.java.net/jive/th ... t%3D0
/
简而言之,如果您不直接使用源文件,就无法获得它 /喜欢什么 APT 在汇编期间/.
君笑尘
赞同来自:
但是,如果使用反射不是严格的要求,您可以直接从源代码中获取此信息。 /只要你有/.