Java + Reflection:调用变量访问方法.可能吗?

Jac*_*ack 1 java reflection properties

我想知道是否有可能,使用反射或类似的东西,只要在读取或写入模式下访问变量时调用方法.简而言之,我的目标与C#属性的行为类似.

示例:假设我有两个A和B类......

public class A{
    public int field;

    public void foo(){ System.out.println("Field modified");}
}

public class B{
    public void bar(A a){
        a.field = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

...并且每当写入a.field时我都想执行方法A.foo().

这在Java中是否可以实现?

提前致谢

ps我知道好的编程实践建议使用getter和setter.我只需要知道我想做什么是可行的.

AC

And*_*yle 7

不通过反射 - 反射只是让您在运行时访问有关类/字段/等的静态信息.

面向方面编程更多的是你想到的 - 这使你可以在源代码的某些点注入少量代码(称为"建议")(例如在方法运行之前,设置字段时等) .这几乎肯定会让你做你想要的.

但是有一点警告 - 正如你似乎提到的那样,依靠方面来处理你​​的一般逻辑不太可能是一个好主意,因为它很难用它们来推理,并且确切地知道将会发生什么(根据定义,它们打破调用方法foo()的默认心理模型意味着控件直接传递给该方法).AOP 非常适合记录或调试等功能,因为它可以让您编写一些代码,这些代码可以轻松地影响许多横切关注点,并且不需要您修改底层应用程序的代码.您的建议可以根据需要进行编织,并在不需要时将其遗漏.