图像和声音文件(3)
接图像和声音文件及图像和声音文件(2)
↓↓↓↓↓↓
不过,可以调用Fleld、Pethod或constructor对象的setAccessible方法覆盖Java的访问控制。例如,
t.setkcessible(true);// now OK to call f.get(harry)
setkccessible方法是AccessibleObject类中的一个方法,它是Field、Wethod和Constructor类的公共超类。这个特性是为调试、持久存储和类似机制提供的。本节稍后将利用它编写一个通用的toString方法。
如果不允许访问,setAccessible调用会抛出一个异常。访问可以被模块系统(见卷Ⅱ的第9章)或安全管理器(卷IⅡ的第10章)拒绝。安全管理器并不常用。不过,在Java9中,由于JavaAPI是模块化的,每个程序都包含模块。
由于太多的库都使用了反射,所以当你使用反射访问一个模块中的非公共特性时,Java9和10只会给出一个警告。例如,本节最后的示例程序会查看ArrayList和Integer对象的内部。运行这个程序时,控制台上会出现以下看起来不太妙的消息:
WARNING: An illegal reflective access operation has occurred
MARNING:Illegal reflective access by objectAnalyzer.ObjectAnalyzer(file:/home/cay
/books/cj11/code/v1ch05/bin/) to field java.util.ArrayList.serialVersionUID
WARNING: Please consider reporting this to the maintainers of
objectAnalyzer.ObjectAnalyzer
MARNING: Use --illegal-access=warn to enable warnings of further illegal
reflective access operations
WARNING: All illegal access operations will be denied in a future release
对目前而言,可以禁用这些警告。需要把java.base 模块中的 java.util和 java.lang包“开”为“无名的模块”。详细内容参见卷Ⅱ的第9章。语法如下:
java .add-opens java.base/java.util=ALL-UMAMED\
--add-opens java.base/java.\
( ̄ω ̄) [摸摸头]:
explicitParametars
调用,作为隐式参数。使用包装靠考数,并返回方法的真的的
包装的。