接口与类型信息
来源:互联网 发布:python解析网页源代码 编辑:程序博客网 时间:2024/05/22 06:39
接口与类型信息
interface关键字的一种重要目标就是允许程序员隔离构件,进而降低耦合性。为了避免客户端程序员将接口类对象向下转型,可以对实现使用包访问权限。对Method对象或者域对象调用setAccessible(true)方法,可以获取各种甚至private权限的对象。例子如下:
包访问权限的类C:public interface A { void f();}class C implements A { public void f() { System.out.println("public C.f()"); } public void g() { System.out.println("public C.g()"); } void u() { System.out.println("package C.u()"); } protected void v() { System.out.println("protected C.v()"); } private void w() { System.out.println("private C.w()"); }}获取类C的方法:public class HiddenC { public static A makeA() { return new C(); }}class HiddenImplementation { public static void main(String[] args) throws Exception { A a = HiddenC.makeA(); a.f(); System.out.println(a.getClass().getName()); callHiddenMethod(a, "g"); callHiddenMethod(a, "u"); callHiddenMethod(a, "v"); callHiddenMethod(a, "w"); } static void callHiddenMethod(Object a, String methodName) throws Exception { Method g = a.getClass().getDeclaredMethod(methodName); g.setAccessible(true); g.invoke(a); }}/* Output:public C.f()typeinfo.packageaccess.Cpublic C.g()package C.u()protected C.v()private C.w()
从该例子可看出,通过使用反射,仍旧可以到达并调用所有方法,甚至是private方法。如果知道方法名,你就可以在其Method对象上调用setAccessible(true),就像在callHiddenMethod()中看到的那样。也从中可以看出,对反射没有隐藏任何东西。而对final成员的修改是安全的,但是其实运行时系统会在不抛出异常的情况下不接受任何修改,所以实际上还是没改成。
阅读全文
0 0
- 接口与类型信息
- 接口与类型信息_reflect
- 14.9 接口与类型信息
- 接口于类型信息-类型信息
- 14章类型信息-----动态代理-----空对象----接口与类型信息
- 从头认识java-12.6 接口与类型信息(怎么绕过接口直接调用类的所有方法)
- JAVA接口与类型安全
- 第十四章 类型信息 反射 动态代理 空对象 接口和类型信息
- 黑马程序员_Java类型信息与反射
- 类型信息之instanceof、isInstance与isAssignableFrom
- Java语言的接口与类型安全
- Java语言的接口与类型安全
- Java语言的接口与类型安全
- Java语言的接口与类型
- Java语言的接口与类型安全
- “窄接口”设计与动态类型发现
- 4. 套接口的类型与协议
- Java中的接口定义与类型安全
- Hadoop安装后dataNode无法启动
- TEXMACS在ubuntu下的使用
- Blade:一款简洁优雅、微内核设计的Java Web框架
- 打造自己的Ubuntu渗透利器--msf、nessus安装
- so big
- 接口与类型信息
- bzoj 1414 && bzoj 3705: [ZJOI2009]对称的正方形(二维Hash)
- Android--hw_get_module解析
- 数字图像处理(1)
- 在linux中编译ACE静态库
- BZOJ-3209 (数论)
- 更换Eclipse黑色皮肤
- 数组计数某一个数的数量
- JS 对象与数组的变化监听