所以我有这个类,我想要接受一个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的通用数组”错误。
答案 0 :(得分:1)
不幸的是,您无法创建通用数组。这是由于在Java中实现泛型的方式,这是通过类型擦除。实际上,所有通用类型都被删除了#34;在编译之前,它们的边界类型(通常为Object
),因此所有编译器都看到Object
而不是T
或E
或O
。擦除过程会生成自动转换,以确保程序仍能按预期工作。
这意味着你无法做到:
new O()
(这会被删除到new Object()
,编译器不知道该怎么做)new O[]
(这会被删除到new Object()
,这对编译器没有任何帮助)你可以做的是投射:
array = (O[]) new Object[size];
事实上,它是如何在Java的集合框架中完成的。你会得到一个未经检查的&#34;&#34;警告,因为编译器无法证明此转换是安全的,但实际上没有其他选择。
此外,我想要指出的关于你的问题的一些事情,你可能已经或可能不知道:
Object
没有类型参数newArray<O>[] = new newArray<O>[newArraySize];
应该是array = new newArray<O>[newArraySize];
。您已经声明了要使用的数组。所以使用它!事实上,您似乎正在实施自己的ArrayList
。如果你是,祝你好运!如果你不是,你应该真正使用现有的实现,除非你需要一些你不能得到的特殊行为......
答案 1 :(得分:0)
你快到了。
请查看以下代码,了解有关如何初始化,填充和打印数组的示例。
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);
}
}
答案 2 :(得分:0)
这有帮助吗?
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