繁体   English   中英

抽象数据类型:对象数组

[英]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而不是TEO 擦除过程会自动生成强制转换,以确保程序仍能按预期运行。

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

  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM