本系列翻译自Oracle官方教程,半翻译,半读后感性质。文末会附上原文链接。
开篇首先强调可以通过反射来设置字段的值,但不属于常规操作。因为违反了类的设计哲学(如果直接操作private
字段,还要get
和set
方法干嘛)。最后再次声明,这种操作需要极其谨慎(utmost discretion)。
接下来以Book
类为例,介绍了如何操作long
、array
和enum
。
最后,再次强调,通过反射来给字段赋值在性能上也不推荐。例如,需要在运行时额外检验字段的访问权限。同时可能会导致一些运行时的优化手段失效。
int x = 1;
x = 2;
x = 3;
这段代码极有可能被JVM优化,但是通过Field.set*()
就未必了。
网友评论