WEB开发网
开发学院软件开发Java Java 编程的动态性,第 2部分: 引入反射 阅读

Java 编程的动态性,第 2部分: 引入反射

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 反射数组数组是Java编程语言中的对象,与所有对象一样,Java 编程的动态性,第 2部分: 引入反射(6),它们都有类,如果您有一个数组,如当代码在不值得信任的代码共享的环境中运行时,由于这些互相矛盾的需求,使用标准 getClass 方法,您可以获得该数组的类

反射数组

数组是Java编程语言中的对象。与所有对象一样,它们都有类。如果您有一个数组,使用标准 getClass 方法,您可以获得该数组的类,就象任何其它对象一样。但是, 不通过现有的实例来获得类不同于其它类型的对象。即使您有一个数组类,您也不能直接对它进行太多的操作 -- 反射为标准类提供的构造函数接入不能用于数组,而且数组没有任何可接入的字段,只有基本的 java.lang.Object 方法定义用于数组对象。

数组的特殊处理使用 java.lang.reflect.Array 类提供的静态方法的集合。该类中的方法使您能够创建新数组,获得数组对象的长度,读和写数组对象的索引值。

清单5显示了一种重新调整现有数组大小的有效方法。它使用反射来创建相同类型的新数组,然后在返回新数组之前,在老数组中复制所有数据。

清单 5:通过反射来扩展一个数组

public Object growArray(Object array, int size) { 
  Class type = array.getClass().getComponentType(); 
  Object grown = Array.newInstance(type, size); 
  System.arraycopy(array, 0, grown, 0, 
    Math.min(Array.getLength(array), size)); 
  return grown; 
} 

安全性和反射

在处理反射时安全性是一个较复杂的问题。反射经常由框架型代码使用,由于这一点,您可能希望框架能够全面接入您的代码,无需考虑常规的接入限制。但是,在其它情况下,不受控制的接入会带来严重的安全性风险,如当代码在不值得信任的代码共享的环境中运行时。

由于这些互相矛盾的需求,Java编程语言定义一种多级别方法来处理反射的安全性。基本模式是对反射实施与应用于源代码接入相同的的限制:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Java 编程 动态性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接