`

Java 使用反射实现扩展数组

阅读更多
/**
 * 
 */
package freewill.reflectdemo;

import java.lang.reflect.Array;

/**
 * @author freewill
 * @desc 使用反射实现扩展数组
 * @see Core Java page196
 */
public class ArrayGrowTest {

	/**
	 * @desc bad
	 * @param a源数组
	 * @return 扩展后的数组
	 */
	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;
	}

	/**
	 * @desc good
	 * @param a源数组
	 * @return 扩展后的数组
	 */
	static Object goodArrayGrow(Object[] a) {
		Class cl = a.getClass();
		if (!cl.isArray())
			return null;
		Class componentType = cl.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;
	}

	/**
	 * 数组内容全部打印方法
	 * 
	 * @param a数组
	 */
	static void arrayPrint(Object a) {
		Class cl = a.getClass();
		if (!cl.isArray())
			return;
		Class componentType = cl.getComponentType();
		int length = Array.getLength(a);
		System.out.println(componentType.getName() + "[" + length + "]={");
		for (int i = 0; i < Array.getLength(a); i++) {
			System.out.println(Array.get(a, i) + " ");
		}
		System.out.println("}");
	}

	/**
	 * @desc Testcase
	 * @param args
	 */
	public static void main(String[] args) {
		Integer[] a = { 1, 2, 3 };
		a = (Integer[]) goodArrayGrow(a);
		arrayPrint(a);

		String[] b = { "Tom", "Dick", "Harry" };
		b = (String[]) goodArrayGrow(b);
		arrayPrint(b);

		// b = (String[]) badArrayGrow(b);
		// arrayPrint(b);
	}
}

分享到:
评论

相关推荐

    利用反射实现的数组增长的小程序

    学习反射的时候学到的一点东东。 ­ 用到的知识点: java.lang.reflect.Array ­ List 集合 内部的实现就是这样的。如果下面的新数组的长度增长原来的一倍,就是Vector集合了。

    在Java中使用反射API的一个实例

    下面我们将深入探讨如何利用Java反射API实现这些功能。 首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、...

    java反射经典实例

    通过上述实例,我们可以看到Java反射机制在许多实际场景中的应用,它扩展了Java代码的灵活性和可扩展性。然而,也应注意,过度使用反射可能会引入复杂性和潜在的安全风险,因此在设计和实现时需权衡利弊。在理解了...

    java反射机制应用

    ### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...

    java主要反射和内存机制

    **一、Java反射机制** Java反射机制是Java提供的一种能够在运行时检查类、接口、字段和方法的能力。它允许程序在运行时动态地获取类的信息并操作类的对象。以下是一些关于Java反射的重要知识点: 1. **Class对象**...

    java反射机制PPT

    Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...

    Java的反射demo示例

    通过这个"Java的反射demo示例",你可以深入理解反射的工作原理,并学习如何在自己的项目中合理运用反射来提高代码的灵活性和可扩展性。记得在使用反射时要注意性能影响,因为它涉及到JVM的元数据查找,过度使用可能...

    使用Java反射实现一个简单的日志记录器.txt

    ### 使用Java反射实现的日志记录器 #### 一、引言 本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过...

    java反射机制

    Java反射机制是在运行时通过Reflection APIs获取任何已知类的内部信息,包括类的修饰符(如public、static等)、超类、实现的接口、字段和方法的全部信息。它还允许在运行时改变字段内容、调用方法,甚至创建未知类...

    Java-反射笔记.pdf

    本笔记将深入探讨Java反射的原理、用途以及如何使用。 一、反射的概念与作用 反射是Java提供的一种能力,它允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用这些方法。这种动态性使得Java...

    java反射........

    Java反射的使用广泛,但也有其潜在的风险。由于反射可以绕过常规的访问控制,因此如果不当使用,可能会破坏封装性,增加代码的复杂性和不稳定性,还可能影响性能。因此,在使用反射时应谨慎,避免在非必要的情况下...

    java反射简单例子demo

    总之,Java反射是Java语言灵活性的重要体现,它允许程序在运行时探索和修改自身的结构和行为,极大地扩展了代码的可操作性。然而,由于反射会破坏封装性,可能会引入安全风险和性能开销,因此在使用时需谨慎。在`...

    java中的反射机制(内含大量实例)

    Java中的反射机制是Java语言的一项强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时...通过理解并熟练掌握这些知识点,开发者可以更好地利用Java反射机制来提升软件的可扩展性和可维护性。

    JAVA反射与代理

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

    java语言反射与动态代理学习笔记

    ### Java语言反射与动态代理深度解析 ...总之,Java反射和动态代理机制为开发提供了强大的工具,可以实现动态性、扩展性和框架级别的抽象,但同时也需要谨慎使用,避免过度依赖,以免影响性能和代码可读性。

    java反射原理及作用

    根据提供的文件信息,我们可以深入探讨Java反射机制的基本原理及其应用场景。 ### Java反射机制的基本概念 Java反射机制允许程序在运行时获取类的信息,并且能够直接操作这些信息。这包括类名、方法名称、参数类型...

    JAVA 反射机制与动态代理ppt

    总的来说,Java反射机制和动态代理是Java平台强大而灵活的特性,它们使得Java程序能够在运行时具有更高的灵活性和可扩展性。然而,使用反射也可能带来性能开销和安全风险,因此在实际应用中需要权衡利弊,合理使用。

Global site tag (gtag.js) - Google Analytics