Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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 toArray()与toArray(新对象[0])_Java_Type Conversion_Toarray - Fatal编程技术网

Java toArray()与toArray(新对象[0])

Java toArray()与toArray(新对象[0]),java,type-conversion,toarray,Java,Type Conversion,Toarray,我有一个名为listtable的ArrayList。由于某种原因,子句[]whatever=listtable.toArray()给出了一个不兼容的类型错误,但是子句[]whatever=listtable.toArray(新子句[0])工作正常。为什么会这样?这两个电话有什么区别?javadoc说它们“功能相同” 这是我的完整代码(相关声明就在结尾之前): public static子句[]readCNF(字符串名,布尔打印)引发IOException { BufferedReader文件=新

我有一个名为
listtable
ArrayList
。由于某种原因,
子句[]whatever=listtable.toArray()
给出了一个不兼容的类型错误,但是
子句[]whatever=listtable.toArray(新子句[0])
工作正常。为什么会这样?这两个电话有什么区别?javadoc说它们“功能相同”

这是我的完整代码(相关声明就在结尾之前):

public static子句[]readCNF(字符串名,布尔打印)引发IOException
{
BufferedReader文件=新的BufferedReader(新文件读取器(“./”+名称));
ArrayList listtable=新的ArrayList();
字符串行=null;
而((line=file.readLine())!=null){
如果(行字符(0)='p')
{
扫描仪=新扫描仪(行);
scanner.next();scanner.next();子句.NumVars=scanner.nextInt();子句.NumClauses=scanner.nextInt();
}else如果(line.charAt(0)!='c'){
ArrayList lits=新的ArrayList();
扫描仪=新扫描仪(行);
while(scanner.hasNext())
{
int var=scanner.nextInt();
如果(var!=0){lits.add(var);}
}
添加(新条款(lits));
} 
}
如果(打印){
for(第条:列表表)
{
子句.print();
}
}
return(listtable.toArray(新子句[0]);//由于返回类型为子句[],因此与问题中的语句相同
}
toArray()
返回
对象的数组。必须将数组的每个元素强制转换为所需的类型

toArray(T[])
接受泛型类型并返回特定类型的数组。无需强制转换返回值和/或数组元素

如上所述,
toArray()
方法是预泛型方法

    List<String> list = new ArrayList<String>();
    list.add("Alice");
    list.add("Bob");

    String[] strArray = list.toArray(new String[0]);
    for (String str : strArray) {
        System.out.println(str);
    }

    Object[] objArray = list.toArray();
    for (Object obj : objArray) {
        String str = (String) obj;
        System.out.println(str);
    }
List List=new ArrayList();
列表。添加(“Alice”);
列表。添加(“Bob”);
String[]strArray=list.toArray(新字符串[0]);
用于(字符串str:strArray){
系统输出打印项次(str);
}
Object[]objArray=list.toArray();
用于(对象obj:objArray){
字符串str=(字符串)obj;
系统输出打印项次(str);
}

继续阅读javadoc:返回数组的运行时类型是指定数组的运行时类型。但是,如果toArray()方法不起作用,为什么他们会有它呢?你说它不起作用是什么意思?你投了石膏吗?那是安全的演员阵容吗?javadoc指定的返回类型是什么?它工作得很好,正如预期的那样。我的意思是,如果括号中没有新对象[0],它就无法编译。我相信它是在泛型之前出现的。
    List<String> list = new ArrayList<String>();
    list.add("Alice");
    list.add("Bob");

    String[] strArray = list.toArray(new String[0]);
    for (String str : strArray) {
        System.out.println(str);
    }

    Object[] objArray = list.toArray();
    for (Object obj : objArray) {
        String str = (String) obj;
        System.out.println(str);
    }