JAVA的反射能否调用字段的方法?

Krehizi
  • 13
public final class Xx{
    private Button button = new Button();
    ...
}

如以上的类,在使用时它会创建一个按钮,我想通过反射来调用button的方法,以此在外部来修改它的某些样式,请问一下,能否做的到?
另一种方法是想通过继承改写的方式,但是它又是被final所修饰的。

回复
阅读 1.3k
5 个回答

你反射,拿到里面的属性,转换成对象,拿到后你不就可以为所欲为了。

反射调方法,需要:ClassMethod,参数,Class的对象
能拿到就能调,你这个场景都能拿到,所以能调

第一个问题:反射可以做到。

第二问题:继承不行的话,可以通过组合的方式扩展呀。

高哲
  • 4
新手上路,请多包涵

1.你可以通过反射获取到Class Xx中的所有字段,然后拿到Button字段通过反射来创建Button对象
2.final修饰的类是无法再去继承的,你可以看一下Button类中你要调用的方法,看一下其上级是否留有可扩展的空间,没有的话你只能考虑一下是否可以通过AOP或者代理模式来实现你要的功能了

JustinFiled
  • 3
新手上路,请多包涵

可以。
1.在反射获得class对象后,调用getDeclaredFiled()方法获得所有控制类型(private、public)的字段。
2.final修饰的不能被继承。对于该类:没有实现接口,所以可以考虑使用Cglib动态代理,生成子类进行目标类增强

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏