public abstract class Master
{
public void printForAllMethodsInSubClass()
{
System.out.println ("Printing before subclass method executes");
System.out.println ("Parameters for subclass method were: ....");
}
}
public class Owner extends Master {
public void printSomething () {
System.out.println ("This printed from Owner");
}
public int returnSomeCals ()
{
return 5+5;
}
}
在不干扰子类方法的情况下...是否可以在执行子类方法之前执行 printForAllMethodsInSubClass()
?
更新:
使用 AspectJ/Ruby/Python...等 是否也可以打印参数?以上代码格式如下:
public abstract class Master
{
public void printForAllMethodsInSubClass()
{
System.out.println ("Printing before subclass method executes");
}
}
public class Owner extends Master {
public void printSomething (String something) {
System.out.println (something + " printed from Owner");
}
public int returnSomeCals (int x, int y)
{
return x+y;
}
}
最佳答案
AspectJ可以为您提供此功能,但这是一个单独的编译步骤,并且涉及一些额外的库。
public aspect ServerLogger {
pointcut printSomething ();
before(): printSomething()
{
(Master)(thisJoinPointStaticPart.getTarget()).printForAlMethodsInSubClass();
}
}
Eclipse 项目提供了 AspectJ 的出色实现,它与 Eclipse 和 Maven 很好地集成。 StackOverflow 上有大量优秀的文档可供使用,而且还有很多非常好的 Material 。
[更新]
要访问参数信息,您可以使用
thisJoinPoint.getSignature();
如果返回的对象是MethodSignature的实例,则访问有关被调用函数的信息的方法,您可以使用 Signature.getParameterNames() 访问正在调用的函数的参数。我认为你必须使用一些反射来实际获取这些值 - AspectJ 似乎无法为你处理这个问题。我实际上必须做一些实验才能为您获得一些工作代码。
关于java - 这在java或任何其他编程语言中可能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403458/