为什么我会收到语法错误

时间:2013-11-18 20:20:50

标签: java

为什么我在.ToArray收到错误消息。 (语法)似乎是我正确的参数值。

感谢您的回复。

import java.util.LinkedList;

public class Vector {


private double doubleComposantes[];
private int intNombreDeComposante = 0;


public Vector(String strComposantes) {

    strComposantes = strComposantes.trim();
    intNombreDeComposante = getNumberOfComposantes(strComposantes);
}

private int getNumberOfComposantes(final String strComposantes) {

    return strComposantes.split(",").length;
}


private double[] getAllComposantes(final String strComposantes) {

    final String[] strComposantesSplitted = strComposantes.split(",");
    LinkedList<Double> doubleComposantesConvertis = new LinkedList<Double>();

    for (String strComposante : strComposantesSplitted) {

        doubleComposantesConvertis.add(Double.valueOf(strComposante));

    }

    int intLongueur = doubleComposantesConvertis.size();
    return doubleComposantesConvertis.toArray(new double[intLongueur]); // error at toArray()
}

}

5 个答案:

答案 0 :(得分:5)

LinkedList中的

toArray签名是

public <T> T[] toArray(T[] a)

并且由于T将在运行时被删除为Object,因此您只能使用Object类型,而不是基本类型。尝试使用Double代替double

return doubleComposantesConvertis.toArray(new Double[intLongueur]); 

请注意,您还必须将方法的返回类型更改为Double[]


更新

如果您想返回double[]并可以使用外部库,则可以使用Doubles.toArray中的guava

return Doubles.toArray(doubleComposantesConvertis);//will return double[]

答案 1 :(得分:1)

请改用:

doubleComposantesConvertis.toArray(new Double[intLongueur]);

请注意Double是大写的。那是因为它是一个对象而不是一个原始对象。

答案 2 :(得分:0)

toArray()接收一个对象数组,你传递一个double数组,它是一个原语而不是对象。自动装箱不适用于阵列。

答案 3 :(得分:0)

double[]不是Double[]。您可以将返回值更改为Double[],也可以手动构建double[]

我建议您避免在代码中使用数组,而是使用List。这样你就不会遇到这个问题。仅在必要时才使用数组。

private List<Double> getAllComposantes(final String strComposantes) {
    final String[] strComposantesSplitted = strComposantes.split(",");
    final List<Double> doubleComposantesConvertis = new LinkedList<Double>();
    for (String strComposante : strComposantesSplitted) {
        doubleComposantesConvertis.add(Double.valueOf(strComposante));
    }
    return doubleComposantesConvertis;
}

另外,请确保您出于某种原因需要LinkedList而不是ArrayListwill perform better in most cases)。

答案 4 :(得分:0)

上述更改将解决您的问题,但实际上您最好使用0-argument toArray方法。