是否可以为 Java 中的自定义(非本机)方法/函数设置默认行为?
是否可以为 Java 中的自定义(非本机)方法/函数设置默认行为?
例如,我想更改默认的“Function”以在调用时执行 System.out.println("message")
。
因此,当创建自定义方法/函数时:
public String testMethod()
{
//custom code
}
它应该在运行自定义代码之前执行新添加的默认行为(在本例中为系统输出)。
即使这是一个糟糕的练习,有可能吗?也许通过扩展函数类或其他什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
一种方法是使用 Java 的面向方面的编程 (AOP):Aspect/J。对于您想要的,AOP 允许您在程序中的特定点注入代码,例如,让指定的方法在进入或退出该方法时执行一些 println 代码。 [AOP 的用途比打印调试语句的简单用途要大得多,但我试图保持回答问题的目标。]
这篇文章(可能有点过时)显示了一个与您想要的类似的示例:
http://www.developer.com /java/other/article.php/3109831/Simplify-your-logging-with-AspectJ.htm
One way is using Aspect-oriented programming (AOP) for Java: Aspect/J. For what you want, AOP would let you inject code in your program at specific points, e.g. having specified methods execute some println code upon entering or exiting the method. [AOP has a much larger purpose than this simple use for printing debug statements, but I'm trying to stay on target for answering the question.]
This article (possibly somewhat dated) shows an example similar to what you want:
http://www.developer.com/java/other/article.php/3109831/Simplify-your-logging-with-AspectJ.htm
听起来您想要面向方面的编程(例如 AspectJ)或字节码编织(例如, ASM 或 cglib)。
It sounds like you want either aspect-oriented programming (e.g., AspectJ) or byte-code weaving (e.g., ASM or cglib).
也许,您应该查看 java.reflect.Proxy。但是它要求您为要监视其方法调用的每个类创建一个代理。
一个例子:
Maybe, you should look at java.reflect.Proxy.But it requires that you create one proxy per class for which you want to monitor method calls.
An example :
如果您只需要为自己的类执行此操作,而不需要为 Java 库中的类或从其他人那里获得的类执行此操作,那么这就是面向对象编程的全部内容。创建顶级类,将此函数放入其中,然后从那里派生任何其他类。
If you only need to do this for your own classes and not for classes from the Java library or that you get from someone else, then this is what Object-Oriented Programming is all about. Create your top level class, put this function in it, and then derive any other classes from there.