[英]Abstract Data Type: Array of objects
因此,我有这个类,并且我想使用一个int方法,并创建一个具有该大小的新数组。 如果我声明
newArray<Object<int,int>> array1 = new newArray<Object<int,int>>(10);
这将创建一个大小为10的数组。
我试着做
public class newArray<O>
{
private O[] array;
public newArray(int newArraySize)
{
newArray<O>[] = new newArray<O>[newArraySize];
}
}
但出现“无法创建newArray的通用数组”错误。
不幸的是,您无法创建通用数组。 这是由于Java通过类型擦除实现了泛型的方式。 实际上,所有通用类型在编译之前都会被“擦除”为其边界类型(通常是Object
),因此编译器看到的都是Object
而不是T
或E
或O
擦除过程会自动生成强制转换,以确保程序仍能按预期运行。
这意味着您不能执行以下操作:
new O()
(将其擦除为new Object()
,编译器不知道该如何处理) new O[]
(将其擦除到new Object()
,这再次对编译器没有帮助) 您可以做的是投射:
array = (O[]) new Object[size];
实际上,这就是在Java的Collections框架中完成的。 您将收到“未经检查”的警告,因为编译器无法证明此转换是安全的,但实际上没有其他选择。
另外,关于您的问题,我想指出的几件事,您可能已经知道或可能不知道:
Object
没有类型参数 newArray<O>[] = new newArray<O>[newArraySize];
应该确实是array = new newArray<O>[newArraySize];
。 您已经声明了要使用的数组。 所以用吧! 看起来您实际上正在实现自己的ArrayList
。 如果是,祝您好运! 如果不是,那么您应该确实使用现有的实现,除非您需要一些其他无法避免的特殊行为...
你快到了。
请看以下代码,以获取有关如何初始化,填充和打印数组的示例。
import java.util.*;
public class Test
{
public static void main(String[] args)
{
// define the array
List<Integer> array1 = new ArrayList<Integer>(10);
// initialize the array with some value. In this case, the Integer "200"
// note that the array doesn't have a hard limit of 10 as define above. You can change the following value to 20 and it will still work
for (int i = 0; i < 10; i++)
{
array1.add(i, 200);
}
// print the array
System.out.println(array1);
}
}
这有帮助吗?
ArrayList<Integer[][]> r = new ArrayList<Integer[][]>(10);
// You could replace the above list with a custom list
Integer[][] ob = new Integer[1][2];
ob[0][0] = 10;
ob[0][1] = 20;
r.add(ob);
for(Integer[][] o : r)
for(Integer[] o1 : o)
for(Integer o2 : o1)
System.out.println(o2);
输出为:
10
20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.