昨天解决了一个问题:
通过类名获取特定的类型数组
今天碰上新的问题,通过类名获取不知道长度的类型数组
我的第一反应是ArrayList,于是我编写了以下代码
String className = "test.User";
Object[] objs = (Object[]) Array.newInstance(Class.forName(className), length);
List list = new ArrayList(Arrays.asList(objs));
list.add(Class.forName(className).newInstance());
结果:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at com.brightcreek.tradeshow.test.Test.main(Test.java:15)
经过测试后发现
Arrays.asList(parents)转化后是java.util.Arrays$ArrayList,而且不可改变,也就是说,这个数组是只读的
不过还好,解决方法也很简单
//List list = new ArrayList(Arrays.asList(objs));
List list = new ArrayList(Arrays.asList(objs));
不过这样返回的是ArrayList,需要返回数组怎么做呢?
不打马虎眼了,正确答案是
list.toArray((Object[]) Array.newInstance(Class.forName(className), list.size()));
返回的本质是T[],而不是Object[]
分享到:
相关推荐
而`String`对象虽然也有类似的功能,但由于其设计为不可变对象,为了保持简洁性和一致性,选择通过方法的方式来获取长度,这样可以在内部进行优化,比如缓存长度值以提高多次调用时的性能。 **原因二:设计哲学** ...
数组的长度可以使用 x.length 获取,例如:int[] z = new int[2]; System.out.println(z.length);。 本章节介绍了 Java 中的基本数据类型、标识符与关键字、类型转换运算、输入与输出和数组等知识点,对于学习 Java...
1. **访问元素**:通过索引来访问数组元素,如arr[0]获取第一个元素。 2. **遍历数组**:通常使用for循环遍历数组的所有元素,如for (int i = 0; i ; i++) { System.out.println(arr[i]); }。 3. **数组复制**:...
6. **Array类getLength(Object)**:获取一个数组的长度,适用于已知对象是数组但不知道具体类型的情况。 7. **Array类get(Object, int)**:获取数组中的某个元素,适用于已知对象是数组但不知道具体类型的情况。
Java编程语言中的标识符与基本数据类型以及数组是构建程序的基础元素。让我们深入探讨这些概念。 首先,我们来看标识符。标识符是用来命名程序中不同元素的名称,比如类名、变量名、方法名、数组名等。在Java中,一...
其中,public 是访问修饰符,static 表示该方法可以直接通过类名调用,void 表示该方法不返回任何值,main 是方法名,String[] args 是方法的参数列表,表示命令行参数。 输入输出 Java 提供了多种输入输出方式,...
* 数组的长度可以通过.length属性来获取 三、控制流语句 * while语句可以通过break语句来退出循环 * while语句可以通过continue语句来跳过当前循环 * switch语句可以根据不同的条件执行不同的分支 四、函数 * ...
易语言是一种基于中文编程的计算机程序设计语言,它旨在降低编程的难度,让不懂英文的用户也能进行软件开发。在易语言中,枚举窗口信息是一项重要的功能,它允许程序员获取系统中所有打开窗口的相关信息,包括窗口...
通过反射,我们可以获取数组的类信息,包括元素类型、长度等。Class类的isArray()方法用于判断是否为数组类型,getComponentType()则用于获取数组元素的类型。 2. 对接收数组参数的成员方法进行反射: 反射不仅...
5. **数组长度获取**:一维数组的长度可以通过数组名.length获取,如int[] arr;则arr.length返回数组长度。二维数组中,arr.length返回一维数组的个数,若要获取二维数组中每个一维数组的长度,需要遍历数组。 **...
- `getElementsByClassName(className)`:根据类名获取元素节点的数组。 此外,还可以使用CSS选择器库(如jQuery)来简化DOM操作,提高效率。总的来说,JavaScript DOM编程艺术这本书涵盖了JavaScript基础、DOM操作...
* 可以使用数组的 length 属性来获取数组的长度。 3. Java ArrayList * ArrayList 是一个可变长的数组实现。 * ArrayList 提供了 size() 方法来获取集合的长度。 * 可以使用 get(int index) 方法来获取下标 index ...
Java语言的反射机制是其强大的特性之一,它允许在运行时检查类、接口、字段和方法的信息,甚至能够在不知道具体类型的情况下动态创建对象并调用其方法。这一机制基于Java的`java.lang.reflect`包,提供了`Class`、`...
3. **通过类名** `.class`: 如果在编译时就知道类名,可以直接使用类名后跟`.class`来获取`Class`对象。如: ```java Class c = java.awt.Button.class; ``` 4. **动态加载类** `forName()`: 当类名在运行时才...
4. **处理结果**:`GetWindowText`会将标题复制到提供的字符数组中,你可以通过打印或进一步处理这个字符串来查看或使用结果。 ```c wprintf(L"当前活动窗口的标题是:%s\n", title); ``` 这里使用`wprintf`是因为`...
此外,还通过`getElementsByTagName`方法获取页面上所有的`li`元素,并通过循环访问它们的长度、特定`li`的标签名以及第一个`li`子节点的值。 以上知识点覆盖了使用DOM的基本操作和概念,适合初学者入门和了解如何...
一旦数组被创建,我们可以通过索引来访问和修改数组元素,也可以使用`length`属性获取数组的长度。另外,虽然不能直接改变已创建数组的大小,但可以创建一个新的更大或更小的数组,然后通过复制原数组元素来实现动态...
7. **创建数组并修改其内容**:数组长度和组成类型可以在运行时确定。 需要注意的是,在存在更高效替代方案的情况下,应避免使用反射API,因为反射通常会导致性能下降并且可能带来安全风险。 #### 三、反射API实践...
4. 处理数组:反射提供API来创建和操作数组,包括获取数组长度、遍历数组元素等。 5. 执行注解处理:反射可以用于检测类、方法或字段上的注解,并根据注解执行相应的逻辑。 `BeanHelper.java`可能是一个工具类,...