java 对缺乏潜在类型机制的补偿 :反射
2016-05-02 14:36
316 查看
package lu.generics; import static lu.utils.Print.*; import java.lang.reflect.Method; /* * 通过反射,CommunicateReflectively.perform()能够动态地确定所需要的方法是否可用并调用他们。 * 他甚至能够处理Mime只有一个必须的方法这一事实,并能够部分实现其目标。 * 反射将所有的类型检查都转移到了运行时,因此在许多情况下并不是我们所希望的。*/ class Mime{ public void walkAgainstTheWind(){} public void sit(){print("Pretending to sit");} public void pushInvisibleWalls(){} public String toString(){return "Mine";} } class SmartDog{ public void speak(){ print("Woof!"); } public void sit(){print("Sitting");} public void reproduce(){} } class CommunicateReflectively{ public static void perform(Object speaker){ Class<?> spkr=speaker.getClass(); try{ try{ Method speak=spkr.getMethod("speak"); speak.invoke(speaker); }catch(NoSuchMethodException e){ print(speaker+" cannot speak"); } try{ Method sit=spkr.getMethod("sit"); sit.invoke(speaker); }catch(NoSuchMethodException e){ print(speaker+" cannot sit"); } }catch(Exception e){ throw new RuntimeException(speaker.toString(),e); } } } public class LatentReflection { public static void main(String[]args){ CommunicateReflectively.perform(new SmartDog()); CommunicateReflectively.perform(new Robot()); CommunicateReflectively.perform(new Mime()); } }
相关文章推荐
- Java本地文件操作(三)文件属性的读取
- Part 2 How to Monitor Java Garbage Collection
- RxJava结合ProgressDialog实现请求数据
- java构造类
- Part 1 Understanding Java Garbage Collection
- 第4章 控制执行流程
- eclipse创建maven模块工程
- Java本地文件操作(二)文件夹的创建、删除、重命名
- java权限修饰符
- 码农小汪-Spring MVC url路径,请求方法限定
- 9.2 JavaScritp:为数据带来生命-数组对象
- java中的线程问题
- SpringMVC访问静态资源的三种方式
- org.springframework.beans.factory.NoUniqueBeanDefinitionException
- Java 线程局部存储
- java并发编程(6)--synchronized
- SpringData 学习(4)—— 使用 @Query 注解实现查询
- java数组排序,二分查找
- java中几种复制数组的方法比较
- Java本地文件操作(一)文件的创建、删除、重命名