一个类可以在运行时向自己添加一个方法(比如从一个static块),这样如果有人在这个类上执行反射,他们会看到新方法,即使它没有在编译时定义?
背景:
我正在使用的框架要求按惯例Action定义具有doAction(...)方法的类.框架在运行时检查这些类,以查看其doAction()方法中可用的参数类型.例如:doAction(String a,Integer b)
我希望每个类能够以编程方式生成doAction()具有各种参数的方法,并在检查时及时生成.方法的主体可以是空的.
我的编译器类正在创建一个我们打算编译为Java Bytecode的语言.我们已经取得了很多进展,并且正在接近代码生成的时间.
我们在查找有关如何从编译器创建.class文件的信息时遇到问题.你有什么资源可以给我们一些帮助吗?我们已经有很多关于指令集的文档,但是需要有关如何直接填写类文件/ hex的写入的信息.
我们不需要有关反编译.class文件的信息或建议.
即使是从头开始编写.class文件的简单示例也是非常好的.
JVM规范不是我们追求的.我们真正需要的是一个例子或演练.
我的包中有许多自定义的Exception类,它们与它们的基类没有区别.我拥有它们的唯一目的是将一个异常原因与另一个异常原因区分开来.这是我的一个Exception类的样子:
package com.XXX;
/**
* Thrown when query format is invalid.
*/
public class InvalidFormatException extends Exception {
/**
* Public ctor.
* @param m Supplementary message
*/
public InvalidFormatException(final String m) {
super(m);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是所有类都完全相同,就像双胞胎一样.唯一不同的是他们的名字.我不喜欢这种情况,因为这是一个明显的代码重复.在其他语言(如PHP,Python等)中,我会在运行时动态地声明这些类,但Java不允许这样,我也理解.有没有解决方法?
在Python中,您可以使用它exec()来执行一段代码。
有没有什么方法可以在 Java 中执行此操作,以便我可以从字符串调用函数,而且还可以执行其他操作,例如获取一些用户输入并将其作为 Java 代码运行。
注意:这与 Java 中是否有 eval() 函数不同?; 那只是eval()我想要的exec()。