`
lyw985
  • 浏览: 40551 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

通过类名获取特定的类型数组

阅读更多
需求:参数为className,数组大小length,返回一个特定的类型的数组

耗费脑力一堆,但是答案相当的简单,代码如下
public static Object[] getArrayByClassName(String className, int length)
		throws NegativeArraySizeException, ClassNotFoundException {
	return (Object[]) Array.newInstance(Class.forName(className), length);
}


别看这个返回是Object[],你如果使用反射getClass().getName() 得到的就是你想要的数组类型,适用于枚举。

举个例子:
public enum NoteMessage {
	A("A value"), B("B value");
	private final String value;

	public String getValue() {
		return value;
	}

	NoteMessage(String value) {
		this.value = value;
	}
}

测试代码
String[] strs = new String[] { "A", "B" };
Object[] param1 = getArrayByClassName("NoteMessage", strs.length);
Object[] param2 = new Object[strs.length];
for (int i = 0; i < strs.length; i++) {
    param1[i] = getFieldObject(Class.forName("NoteMessage",strs[i]);
    param2[i] = getFieldObject(Class.forName("NoteMessage",strs[i]);
}
System.out.println(param1.getClass().getName());
System.out.println(param2.getClass().getName());

getFieldObject方法如下
public static Object getFieldObject(Object obj, String fieldName) throws SecurityException,
		NoSuchFieldException, IllegalArgumentException, IllegalAccessException,
		NoSuchMethodException, ClassNotFoundException {
	Field field = obj.getClass().getDeclaredField(fieldName);
	field.setAccessible(true);
	return field.get(obj);
}


分享到:
评论

相关推荐

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class&lt;Color&gt; colorClass = (Class) Class.forName(...

    JDBC中的Results相关函数

    如果数据库驱动支持,也可以通过指定类名来获取特定类型的对象。 在实际使用中,推荐使用与数据类型对应的方法(标记为"T"的列)以避免数据转换的错误。例如,对于日期类型,最好使用`getDate()`、`getTime()`或`...

    Intent传递对象、对象数组

    Data则包含了Intent的数据信息,可以是URI或者特定的数据类型。 二、Parcelable接口 在Android中,如果要传递复杂对象(如自定义对象)或者对象数组,对象必须实现Parcelable接口。Parcelable接口比Serializable...

    实例讲解Java编程中数组反射的使用方法

    例如,通过`Class.forName()`方法,我们可以根据字符串形式的类名获取对应的`Class`对象,然后创建实例、访问或调用其成员。反射还包括获取类的构造器、方法和字段,并进行相应的操作,如调用方法、设置和获取字段值...

    Java中解析dex文件

    3. **Type ID Section**:包含了类名、接口名、数组类型和其他类型定义的ID。 4. **Proto ID Section**:定义了函数原型,包括返回类型和参数类型。 5. **Field ID Section**:每个字段都有一个唯一的ID,由所属类...

    java根据方法名称取得反射方法的参数类型示例

    4. 使用另一个`for`循环将参数类型数组转换为`Class`对象数组`paramTypes`,这一步是必要的,因为`Class.forName()`方法需要的是类名的字符串形式。 5. 最后,返回`paramTypes`数组,包含找到的方法的所有参数类型...

    易语言枚举窗口信息.rar

    5. **类名(Class Name)**:每个窗口都属于特定的窗口类,类名是区分窗口类型的重要标志。通过类名,我们可以识别出特定的应用程序窗口,例如,对话框窗口、主程序窗口等。 6. **窗口层次结构**:在Windows系统中...

    2.7+对象数组与案例分析1

    对象数组是一种将多个同类型对象存储在一起的数据结构。在示例中,`Student` 类定义了一个包含名字、年龄和分数的学生对象。我们可以通过构造函数初始化对象数组,例如: ```cpp Student stud[3] = { Student(...

    C#OOP课程总复习框架

    数组也是引用类型,但可以是值类型数组或引用类型数组。 3. **集合操作**:在C#中,传统的集合如`ArrayList`和`Hashtable`已经被泛型集合取代,如`List&lt;T&gt;`和`Dictionary, TValue&gt;`。泛型提供更好的性能、类型安全...

    Ja实用教程第版习题解答.pdf

    标识符是用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列。标识符由字母、下划线、美元符号和数字组成,第一个字符不能是数字。 2. 什么叫关键字?关键字就是 Java 语言中已经被赋予特定意义的...

    Day43 Java反射(二)

    1. **万能数组扩展**:通过反射技术可以创建通用的数组处理方法,实现对不同类型数组的操作而无需编写特定类型的代码。 2. **业务与逻辑分离**:反射可以用于实现模块化编程,将业务逻辑和控制逻辑分开,提高代码...

    java反射机制1

    数组类型的Class对象获取有些特殊,需要使用Java类型描述符,例如`"[D"`对应`double[]`,`"[[Ljava.lang.String;"`对应`String[][]`。 3. 反射`java.lang.Runtime`类 `java.lang.Runtime`类包含`exec`方法,可以...

    DOM基础教程之使用DOM

    - `getElementById`:通过ID获取特定元素。 3. 使用JavaScript访问DOM节点 可以通过JavaScript中的DOM方法来访问和操作HTML文档中的节点。示例中使用了`getElementsByTagName`和`getElementById`方法: - `...

    650.648.JAVA基础教程_反射-获取运行时类的属性结构及其内部结构(650).rar

    在Java中,反射机制允许我们通过类名(String类型)动态地创建对象,访问类的私有成员,调用私有方法,甚至修改类的属性。这种能力使得Java更具灵活性和可扩展性,特别是在框架开发、插件系统和元编程等场景下。 要...

    DELPHI 所有进程级按标题查子进程 源程序

    此外,对于高级的使用场景,你可能还需要考虑多线程处理,以提高性能,或者添加过滤条件,如只查找特定类型的窗口类(使用`GetClassName`函数)。同时,为了保证程序的稳定性和安全性,应确保在访问系统资源后正确...

    java反射机制.pdf

    - `Class`类:代表Java中的每一个类,可以通过类名获取其对应的`Class`对象,例如`Class.forName("全限定类名")`。 - `Field`类:表示类的成员变量,包括属性和常量。 - `Method`类:代表类的方法,包括实例方法...

    Java语言的反射机制

    通过`Class.forName()`方法,我们可以根据类名获取到对应的`Class`对象。一旦有了`Class`对象,我们就可以获取类的构造器、方法、字段等信息。 2. **对象的创建**:反射机制允许我们在运行时动态创建对象。通过`...

    c#,windows Api读取其他程序SysListview32内容的类

    使用`FindWindow`函数查找具有特定类名和窗口名的窗口。对于SysListView32,可能需要查找具有"SysListView32"类名的窗口。如果窗口有特定的标题,也可以通过标题来查找。 3. **获取窗口信息**: 通过`...

    java反射例子 希望可以帮助大家

    可以通过`isInterface()`判断一个类是否为接口,通过`getInterfaces()`获取类实现的所有接口,通过`isEnum()`判断是否为枚举类型,通过`getEnumConstants()`获取枚举常量。 8. **注解的反射**: 反射允许检查类、...

    DELPHI RTTI 探索

    例如,`GetTypeData`函数可以用来获取特定类型的`PTypeInfo`结构体,进而了解该类型的详细信息。 #### 获取其它数据类型的 RTTI 信息 除了上面提到的几种类型外,Delphi的RTTI还支持获取更多复杂数据类型的类型...

Global site tag (gtag.js) - Google Analytics