我这样写:
ArrayList<DaysTimes> []daysTimes=new ArrayList[cYear];
其中DaysTimes为一个已定义的类,cYear为一个int
会有下面这样的警告:
Type safety: The expression of type ArrayList[] needs unchecked conversion to conform to ArrayList<DaysTimes>[]改成这样后:
ArrayList<DaysTimes> []daysTimes=new ArrayList<DaysTimes>[cYear];
就变成错误了:
Cannot create a generic array of ArrayList<DaysTimes>请问怎么写才能没有警告

解决方案 »

  1.   

    class DaysTimes{
                
            }
            int cYear=1;
            ArrayList<DaysTimes> []daysTimes=new ArrayList[cYear];
            daysTimes[0]=new ArrayList<DaysTimes>();就是这么写的,没有问题!什么问题都没有
      

  2.   

    楼上的,不是吧,我这里怎么会有个警告,是可以通过编译,但是会有警告,我不想我的代码有警告。
    我是的是jdk1.504,xp_sp2,eclipse311
      

  3.   

    在方法前加
    @SuppressWarnings("unchecked")
      

  4.   

    hehe,果然有趣,我把语句改成:    ArrayList<DaysTimes>[] daysTimes = (ArrayList<DaysTimes>[]) new ArrayList[cYear];结果,警告信息又变成了:    Type safety: The cast from ArrayList[] to ArrayList<DaysTimes>[] is actually checking against the erased type ArrayList[]看不懂。谁给翻译一下,这是什么意思啊?我想,编译器给出警告的目的在于,“这么写虽然语法上能通过,但是在某些情况下(或者是在不恰当使用的时候),可能会出现跟预想不一致的结果”。那么,楼主遇到的那条警告信息,以及我这里看到的警告信息,都是什么意思呢?编译器预见到什么“容易犯错误”的情形了呢?
      

  5.   

    我是这样理解的,既然你用了范型,那么就应该能够在编译时期来确定类型,否则的话就会出现这个警告,这个警告本身没有什么,它只是告诉你在编译区无法确定类型,要你自己注意类型,不要在运行期出现错误,这样的话其实是用起来就和在1.4中没使用范型时没有区别了。ArrayList<DaysTimes>[] daysTimes = (ArrayList<DaysTimes>[]) new ArrayList[cYear];因为这里是对new ArrayList[cYear]进行下溯造型的,你根本就没有办法在运行时期来检查是否正确,该一下也许比较好理解ArrayList[] Tempa = new ArrayList[cYear];
    ArrayList<DaysTimes>[] daysTimes = (ArrayList<DaysTimes>[])Tempa;这样出现的警告是一样的,那我们再改一下ArrayList[] Tempa = new ArrayList[cYear];
    for(int i=0;i<Tempa.length;i++){
      Tempa[i] = new ArrayList<String>();  //注意这儿用的是String
    }
    ArrayList<DaysTimes>[] daysTimes = (ArrayList<DaysTimes>[])Tempa;出现的警告还是一样,所以这个警告就是告诉你其实你根本就没有完全用范型,所以要自己注意类型。