【Core Java Volume 3】反射---编写泛型数组代码
2016-09-22 17:55
459 查看
import java.lang.reflect.Array; import java.util.Arrays; public class CopyOfTest { /** * 测试 * @date 2016/9/22 * @param args * @author WGS */ public static void main(String[] args) { int[] a={1,2,3}; //使用Arrays.copyOf()用于拓展已经填满的数组 a=Arrays.copyOf(a, 10); System.out.println(Arrays.toString(a)); //****通用的能够实现的方法 a=(int[]) goodCopyOf(a, 10); System.out.println(Arrays.toString(a));//[1, 2, 3, 0, 0, 0, 0, 0, 0, 0] //badCopyOf返回的数组类型是Object[],无法强制转化为String[] String[] b={"Harry","Jerry","Tom"}; b=(String[])badCopyOf(b, 10); System.out.println(Arrays.toString(b));//java.lang.ArrayIndexOutOfBoundsException } /** * 将原数组a扩容为长度为newLength的新数组newArray(无法实现) * @param a:将要被转化的数组 * @param newLength:新数组长度 * @return:返回扩容后的数组 */ public static Object[] badCopyOf(Object[] a,int newLength){ Object[] newArray = new Object[newLength]; System.arraycopy(a, 0, newArray, 0, newLength); return newArray; } /** * 将原数组a扩容为长度为newLength的新数组newArray(可实现) * @param a:将要被转化的数组 * @param newLength:新数组长度 * @return:返回扩容后的数组 */ public static Object goodCopyOf(Object a,int newLength){ //1 获取数组a的类对象 Class cl=a.getClass(); //2 确认a是一个数组 if(!cl.isArray()) return null; // 3 获得数组a的类型 Class componentType =cl.getComponentType(); //System.out.println("componentType:"+componentType);int //4 获得数组a的长度 int length = Array.getLength(a); //5 Arrays.newIinstance()方法,可以构造新数组,提供了新数组的元素类型和数组长度 Object newArray = Array.newInstance(componentType, newLength); //复制后即可得到与原数组类型相同的newLength长度的新数组 System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength)); return newArray; } }
相关文章推荐
- java反射编写泛型数组代码
- Java--(三)反射之编写泛型数组代码
- 通过java的反射编写泛型数组
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
- Java下的Framework编写(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议93~97)
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议102~105)
- Java下的Framework编写(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)(1)--序
- 利用Java反射、泛型和apache/poi编写可通用的导出Excel代码
- 使用反射编写泛型数组代码
- 编写高质量代码:改善Java的151个建议八(泛型和反射)93
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议98~101)
- [编写高质量代码:改善java程序的151个建议]建议65 避开基本类型数组转换列表陷阱
- java代码:双色球用数组和集合编写
- Java反射之method,数组与Object关系,泛型参数
- Core Java(十三) 泛型数组列表,对象包装器与自动打包,枚举类
- [改善Java代码]不能初始化泛型参数和数组
- 读书笔记--编写高质量代码:改善java程序的151个建议(五)数组和集合
- <CoreJava> 5.3 泛型数组列表