Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象数据类型:对象数组_Java_Arrays_Data Structures - Fatal编程技术网

Java 抽象数据类型:对象数组

Java 抽象数据类型:对象数组,java,arrays,data-structures,Java,Arrays,Data Structures,所以我有一个类,我想创建一个接受int的方法,并创建一个新的数组。如果我 申报 newArray数组1=新的newArray(10); 这将创建一个大小为10的数组 我试过了 public class newArray<O> { private O[] array; public newArray(int newArraySize) { newArray<O>[] =

所以我有一个类,我想创建一个接受int的方法,并创建一个新的数组。如果我 申报

newArray数组1=新的newArray(10);
这将创建一个大小为10的数组


我试过了

    public class newArray<O>
    {

        private O[] array;

        public newArray(int newArraySize) 
          {
             newArray<O>[] = new newArray<O>[newArraySize];
          }
}
公共类newArray
{
专用O[]阵列;
公共newArray(int newArraySize)
{
newArray[]=newnewarray[newArraySize];
}
}
但是我得到了一个“无法创建newArray的通用数组”错误。

您就快到了

请看下面的代码,以获取有关如何初始化、填充和打印数组的示例

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);
    }
}
import java.util.*;
公开课考试
{
公共静态void main(字符串[]args)
{
//定义数组
列表array1=新的ArrayList(10);
//使用某个值初始化数组。在本例中,整数“200”
//请注意,数组没有上面定义的10的硬限制。您可以将以下值更改为20,它仍然可以工作
对于(int i=0;i<10;i++)
{
阵列1.添加(i,200);
}
//打印阵列
系统输出打印LN(数组1);
}
}
这有帮助吗

    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);

不幸的是,您无法创建通用数组。这是由于泛型是通过类型擦除在Java中实现的。实际上,在编译之前,所有泛型类型都被“擦除”为它们的边界类型(通常是
Object
),因此编译器看到的都是
Object
,而不是
T
E
O
。擦除过程生成自动强制转换,以确保程序仍能按预期工作

这意味着您不能执行以下操作:

  • new O()
    (这会被删除到
    new Object()
    ,编译器不知道如何处理它)
  • newo[]
    (这会被删除到
    new Object()
    ,这对编译器也没有帮助)
你可以做的是铸造:

array = (O[]) new Object[size];
事实上,Java的集合框架就是这样做的。您将得到一个“unchecked”警告,因为编译器无法证明此转换是安全的,但实际上没有其他选项

另外,关于你的问题,我想指出一些你可能知道或不知道的事情:

  • 不能将基元用作类型参数
  • 对象
    没有类型参数
  • newArray[]=newnewarray[newArraySize]
    应该是
    array=newnewarray[newArraySize]。您已经声明了要使用的数组。所以使用它吧
    

实际上,看起来您正在实现自己的
ArrayList
。如果你是,祝你好运!如果没有,您应该真正使用现有的实现,除非您需要一些其他方式无法获得的特殊行为…

这是因为您无法在Java中创建通用数组。这是Java中泛型的一个限制。请阅读这里:您能否澄清一下:“这将创建一个大小为10的数组”。哪种类型的数组?
10
20
array = (O[]) new Object[size];