Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中运行时的方法声明_Java_Methods_Runtime_Declaration - Fatal编程技术网

java中运行时的方法声明

java中运行时的方法声明,java,methods,runtime,declaration,Java,Methods,Runtime,Declaration,我尝试在运行时为类声明一个java方法。我不应该在编译时编写这个方法,也不应该硬编码它。我认为有一些方法可以使用反射,但我不知道如何使用。这怎么会发生 这一切都来自: 我会读输入像 name=john,age=21 name=smith,age=23 然后我必须使用“getname”和“getage”方法访问它们的所有“name”和“age”值 但是,姓名和年龄词可以更改为,即姓氏和长度;然后,我必须使用“getname”和“getlength”方法访问他们的姓氏和长度 我知道我将使用invo

我尝试在运行时为类声明一个java方法。我不应该在编译时编写这个方法,也不应该硬编码它。我认为有一些方法可以使用反射,但我不知道如何使用。这怎么会发生

这一切都来自: 我会读输入像

name=john,age=21
name=smith,age=23
然后我必须使用“getname”和“getage”方法访问它们的所有“name”和“age”值

但是,姓名和年龄词可以更改为,即姓氏和长度;然后,我必须使用“getname”和“getlength”方法访问他们的姓氏和长度

我知道我将使用invoke调用getXXX方法。但我如何在运行时声明它们呢?
这就是实际问题。

您可以使用ASM之类的字节码生成库、BeanShell之类的代码snipplet库,或者使用编译器API在运行时编译类


然而,我也怀疑你不需要这样做,有一个更简单的方法。也许您可以说您希望这个方法做什么?

并不是要向类添加新方法。Peter提到的一些高级工具可以帮助您实现这一点

我假设您可能能够使用脚本语言解释器,该解释器可以是用Java编写的,也可以是与Java接口的(例如)。如果你想将它与Rhino集成,你可能必须用Javascript编写这个方法,但你仍然可以从中访问你可能需要的任何Java对象。

你能告诉我们为什么要这样做吗?@James.Xu我编辑了我的问题来说明原因。为什么你必须调用
getXXX
?为什么不将这些值存储在HashMap中并调用
getMyValue(“name”)
?除非你给出了问题的一个过于简化的版本,否则这就是用大炮射击苍蝇。所以方法集包括:{getname,getname,getlength,getage},还有吗?方法集是无限的吗?看来你是想用枪来射一只狗mosquito@AlockLeo .... 为什么?做一些非常复杂的事情需要一个非常好的理由。在运行时调用编译器来做像这样简单的事情听起来并不正确。