这是可能的java或任何其他编程语言

dra*_*ake 0 java programming-languages

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

不搞乱子类的方法......是否可以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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*s K 6

AspectJ可以为您提供此功能,但它是一个单独的编译步骤,并涉及一些额外的库.

public aspect ServerLogger {
    pointcut printSomething ();

    before(): printSomething()
    {
            (Master)(thisJoinPointStaticPart.getTarget()).printForAlMethodsInSubClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse Project提供了一个很好的AspectJ实现,可以很好地与Eclipse和Maven集成.这里有很多很棒的文档,在StackOverflow上有很多非常好的材料.

[更新]

要访问参数信息,您可以使用

thisJoinPoint.getSignature(); 
Run Code Online (Sandbox Code Playgroud)

如果返回的Object是MethodSignature的实例,则访问有关被调用函数的信息的方法,您可以使用Signature.getParameterNames()来访问被调用函数的参数.你必须使用一些反射来实际获得值,我认为 - AspectJ似乎并没有为你处理这个问题.我必须做一些实验来为你获得一些有用的代码.