需求:参数为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);
}
分享到:
相关推荐
1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class<Color> colorClass = (Class) Class.forName(...
如果数据库驱动支持,也可以通过指定类名来获取特定类型的对象。 在实际使用中,推荐使用与数据类型对应的方法(标记为"T"的列)以避免数据转换的错误。例如,对于日期类型,最好使用`getDate()`、`getTime()`或`...
Data则包含了Intent的数据信息,可以是URI或者特定的数据类型。 二、Parcelable接口 在Android中,如果要传递复杂对象(如自定义对象)或者对象数组,对象必须实现Parcelable接口。Parcelable接口比Serializable...
例如,通过`Class.forName()`方法,我们可以根据字符串形式的类名获取对应的`Class`对象,然后创建实例、访问或调用其成员。反射还包括获取类的构造器、方法和字段,并进行相应的操作,如调用方法、设置和获取字段值...
3. **Type ID Section**:包含了类名、接口名、数组类型和其他类型定义的ID。 4. **Proto ID Section**:定义了函数原型,包括返回类型和参数类型。 5. **Field ID Section**:每个字段都有一个唯一的ID,由所属类...
4. 使用另一个`for`循环将参数类型数组转换为`Class`对象数组`paramTypes`,这一步是必要的,因为`Class.forName()`方法需要的是类名的字符串形式。 5. 最后,返回`paramTypes`数组,包含找到的方法的所有参数类型...
5. **类名(Class Name)**:每个窗口都属于特定的窗口类,类名是区分窗口类型的重要标志。通过类名,我们可以识别出特定的应用程序窗口,例如,对话框窗口、主程序窗口等。 6. **窗口层次结构**:在Windows系统中...
对象数组是一种将多个同类型对象存储在一起的数据结构。在示例中,`Student` 类定义了一个包含名字、年龄和分数的学生对象。我们可以通过构造函数初始化对象数组,例如: ```cpp Student stud[3] = { Student(...
数组也是引用类型,但可以是值类型数组或引用类型数组。 3. **集合操作**:在C#中,传统的集合如`ArrayList`和`Hashtable`已经被泛型集合取代,如`List<T>`和`Dictionary, TValue>`。泛型提供更好的性能、类型安全...
标识符是用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列。标识符由字母、下划线、美元符号和数字组成,第一个字符不能是数字。 2. 什么叫关键字?关键字就是 Java 语言中已经被赋予特定意义的...
1. **万能数组扩展**:通过反射技术可以创建通用的数组处理方法,实现对不同类型数组的操作而无需编写特定类型的代码。 2. **业务与逻辑分离**:反射可以用于实现模块化编程,将业务逻辑和控制逻辑分开,提高代码...
数组类型的Class对象获取有些特殊,需要使用Java类型描述符,例如`"[D"`对应`double[]`,`"[[Ljava.lang.String;"`对应`String[][]`。 3. 反射`java.lang.Runtime`类 `java.lang.Runtime`类包含`exec`方法,可以...
- `getElementById`:通过ID获取特定元素。 3. 使用JavaScript访问DOM节点 可以通过JavaScript中的DOM方法来访问和操作HTML文档中的节点。示例中使用了`getElementsByTagName`和`getElementById`方法: - `...
在Java中,反射机制允许我们通过类名(String类型)动态地创建对象,访问类的私有成员,调用私有方法,甚至修改类的属性。这种能力使得Java更具灵活性和可扩展性,特别是在框架开发、插件系统和元编程等场景下。 要...
此外,对于高级的使用场景,你可能还需要考虑多线程处理,以提高性能,或者添加过滤条件,如只查找特定类型的窗口类(使用`GetClassName`函数)。同时,为了保证程序的稳定性和安全性,应确保在访问系统资源后正确...
- `Class`类:代表Java中的每一个类,可以通过类名获取其对应的`Class`对象,例如`Class.forName("全限定类名")`。 - `Field`类:表示类的成员变量,包括属性和常量。 - `Method`类:代表类的方法,包括实例方法...
使用`FindWindow`函数查找具有特定类名和窗口名的窗口。对于SysListView32,可能需要查找具有"SysListView32"类名的窗口。如果窗口有特定的标题,也可以通过标题来查找。 3. **获取窗口信息**: 通过`...
通过`Class.forName()`方法,我们可以根据类名获取到对应的`Class`对象。一旦有了`Class`对象,我们就可以获取类的构造器、方法、字段等信息。 2. **对象的创建**:反射机制允许我们在运行时动态创建对象。通过`...
可以通过`isInterface()`判断一个类是否为接口,通过`getInterfaces()`获取类实现的所有接口,通过`isEnum()`判断是否为枚举类型,通过`getEnumConstants()`获取枚举常量。 8. **注解的反射**: 反射允许检查类、...
例如,`GetTypeData`函数可以用来获取特定类型的`PTypeInfo`结构体,进而了解该类型的详细信息。 #### 获取其它数据类型的 RTTI 信息 除了上面提到的几种类型外,Delphi的RTTI还支持获取更多复杂数据类型的类型...