`
tianlihu
  • 浏览: 313980 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

利用Java的反射机制编写的可以扩展任意数组大小的方法

阅读更多
原文链接

import java.lang.reflect.Array;

public class ArrayGrowTest {
	public static void main(String[] args) {
		int[] a = { 1, 2, 3 };
		a = (int[]) goodArrayGrow(a);
		arrayPrint(a);
		String[] b = { "Tom", "Dick", "Harry" };
		b = (String[]) goodArrayGrow(b);
		arrayPrint(b);
		System.out.println("The following call will generate an exception");
		b = (String[]) badArrayGrow(b);
	}

	public static Object[] badArrayGrow(Object[] a) {
		int newLength = a.length * 11 / 10 + 10;
		Object[] newArray = new Object[newLength];
		System.arraycopy(a, 0, newArray, 0, a.length);
		return newArray;
	}

	public static Object goodArrayGrow(Object a) {
		Class<?> c1 = a.getClass();
		if (!c1.isArray()) {
			return null;
		}
		Class<?> componentType = c1.getComponentType();
		int length = Array.getLength(a);
		int newLength = length * 11 / 10 + 10;
		Object newArray = Array.newInstance(componentType, newLength);
		System.arraycopy(a, 0, newArray, 0, length);
		return newArray;
	}

	public static void arrayPrint(Object a) {
		Class<?> c1 = a.getClass();
		if (!c1.isArray()) {
			return;
		}
		Class<?> componentType = c1.getComponentType();
		int length = Array.getLength(a);
		System.out.print(componentType.getName() + "[" + length + "]={ ");
		for (int i = 0; i < Array.getLength(a); i++) {
			System.out.print(Array.get(a, i) + ",");
		}
		System.out.println("}");
	}
}




分享到:
评论

相关推荐

    java反射机制学习笔记+反射机制实操案例

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

    java反射机制与动态代理

    通过本篇文章的学习,我们可以了解到Java反射机制的强大之处在于它能在运行时动态地获取类的信息,并对其进行操作。这对于编写高度灵活的代码非常有帮助。同时,动态代理技术为实现AOP(面向切面编程)等高级功能提供...

    java反射机制

    ### Java反射机制详解 #### 一、引言 ...通过合理利用Java反射机制,可以编写更加灵活和可扩展的代码。然而,反射操作通常比常规操作更慢,并且可能会破坏封装性和安全性,因此在实际开发中应当谨慎使用。

    类的反射机制

    2. **创建对象**:反射机制可以让我们在运行时创建任意类的实例,即使我们没有它的构造器。`Class`对象的`newInstance()`方法就是用于创建类的实例。 3. **访问私有成员**:反射可以绕过访问控制,访问私有字段和...

    JAVA反射与代理

    总的来说,Java反射和代理机制提供了对程序运行时行为的强大控制,使得代码更加灵活和可扩展。但同时,也需要注意反射可能会破坏封装性,增加程序的复杂度,降低性能,因此在实际开发中需谨慎使用。理解并熟练运用...

    java反射

    Java反射机制是Java语言的一项强大特性,它使开发者能够编写更加灵活和动态的应用程序。通过使用反射,可以实现在运行时动态获取类的信息和操作对象,从而提高程序的可扩展性和灵活性。然而,反射机制也有其局限性和...

    Java反射技术浅谈 (1).pdf

    Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。反射是提高Java程序...

    java加强笔记

    - 当方法需要接收数组作为参数时,可以使用`Array.newInstance()`创建数组,并将其传递给反射调用的方法。 ##### 8. 数组与Object的关系及其反射类型 - 在Java中,数组也是一种对象,可以通过反射创建和操作数组。 ...

    java笔记 java笔记

    - **可变参数**:方法可以接受任意数量的同类型参数。 以上是Java的基础知识和高级特性的概述。Java是一门功能强大且灵活的编程语言,适用于各种应用场景。掌握这些核心概念和技术将有助于开发者更好地利用Java来...

    Java新手入门的30个基本概念 .txt

    ArrayList是一个动态数组,可以存储任意类型的对象,是Java集合框架中的重要组件,提供了灵活的数据结构和高效的操作。 #### 18. getClass() getClass()方法返回对象所属类的Class对象,可以获取类的各种信息,如...

    Java API_5.0简体中文版

    9. **内省(Introspection)**:Java 5.0加强了对反射API的支持,使得程序可以在运行时检查类、接口、字段和方法的属性。 10. **NIO.2(New I/O 2)**:Java 5.0引入了NIO(非阻塞I/O),NIO.2进一步扩展了这一功能...

    Java语言的科学与艺术(一)

    - **数组**:数组是用来存储固定大小的同类型元素的集合。 - **方法**:Java中的函数称为方法,用于封装一系列操作,提高代码复用性。 - **类与对象**:Java是面向对象的语言,通过定义类来描述现实世界中的对象及其...

    java面试问题集锦

    多态性使得Java能够编写更加灵活和可扩展的代码。 ##### 关于继承与实现的问题 - **继承**:子类可以继承父类的属性和方法,从而减少重复代码,提高代码复用性。 - **实现**:通过实现接口,类可以满足接口定义的...

    学习Java的30个基本概念

    ArrayList是一个动态数组,它可以存储任意类型的对象,并允许动态调整大小。ArrayList是Java集合框架的一部分,提供了许多方便的操作方法。 #### 21. Class对象 每个Java类都有一个对应的Class对象,它包含了关于类...

    Java基础入门教程 第9章 Java的高级特性(共32页).ppt

    可变参数是Java 5引入的特性,允许方法接受任意数量的相同类型参数。它在方法签名中通过三个点`...`来表示,如`public void printNumbers(int... numbers)`。这实际上是语法糖,编译器会将其转换为一个数组参数。可...

    Java基础教程.md.pdf

    ##### 11.3 Java反射机制 - 反射允许程序在运行时获取类的信息并操作对象。 #### 12. 输入/输出(IO) ##### 12.1 File类 - 文件和目录的创建、删除等操作。 ##### 12.2 了解Java IO流 - 输入流:从源读取数据。 ...

    Java软件开发实战 Java基础与案例开发详解 10-9 练习题 共5页.pdf

    #### 15.2 使用Java反射机制 通过反射,可以在运行时获取类的构造函数、方法、字段等信息。 #### 15.3 反射与动态代理 动态代理利用反射生成代理对象,可以用来增强或扩展对象的功能。 ### 十四、Java标注 ####...

Global site tag (gtag.js) - Google Analytics