java - 这在java或任何其他编程语言中可能吗

标签 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;
    }
}

在不干扰子类方法的情况下...是否可以在执行子类方法之前执行 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/

相关文章:

java - 如何制作我自己的自定义容器 - 没有默认构造函数

c# - 学C#转C/C++?

java - 什么是方法绑定(bind)?

java - java中将对象传递给另一个类引用有什么用?

Java:顺序排序名称并保存到随机访问文件中

java - 何时使用 deflateroutputstream 的 deflate() ?

java - 在 Hibernate 中提取 *HQL*

hashtable - 编程语言用于字典/关联数组的默认哈希函数是什么?

linux - 使用网络开发语言与系统命令交互

java - 除了 Java 之外,还有其他语言可以在移动设备上无处不在吗?