在添加到ArrayList时构造对象

时间:2013-03-05 03:13:03

标签: java object constructor arraylist tostring

public class ComputerKit {
private ArrayList <ComputerPart> parts = new ArrayList();
//constructor
public ComputerKit(ComputerPart ... cp){
    for(int x=0;x<cp.length;x++){
        parts.add(x, cp);

    }
}

//method toString
@Override
public String toString(){
    String s = parts.get(0).toString();

    return s;
}

我正在尝试将ComputerPart对象添加到ComputerKit构造函数中的arraylist。我希望能够根据需要向ComputerKit添加任意数量的ComputerPart。以下是ComputerPart的相关代码:

public class ComputerPart {
//two instance variables representing a computerpart
private String item;
private double price;
//constructor
public ComputerPart(String i, double p){
    setItem(i);
    setPrice(p);
}

我认为,我的问题是编译器不知道如何专门添加ComputerPart。它可以添加一个Object但是如果我把它作为一般对象,那么当我调用parts.get(x).toString()时,我不会在String类型中获得项目和价格私有变量。

我会继续努力,希望我能在3个小时内弄清楚它应有的lololol! 谢谢!

4 个答案:

答案 0 :(得分:0)

private ArrayList <ComputerPart> parts = new ArrayList<>();

您应该使用原始行获取编译器警告。

答案 1 :(得分:0)

此代码看起来很好。您是如何调用不适合您的ComputerKit构造函数的?您应该更改的一件事是如何将部件添加到列表中:

public ComputerKit(ComputerPart ... cp){
    for(ComputerPart part : cp){
        parts.add(cp);
    }
}

如果您感觉超级聪明,请将声明的类型从ArrayList更改为List

private List<ComputerPart> parts = new ArrayList<>();

答案 2 :(得分:0)

这行应该给编译器错误,因为你的ArrayList正在使用ComputerPart对象,而在代码中你正在添加一个数组。

 parts.add(x, cp);

将其更改为

 parts.add(x, cp[x]);

答案 3 :(得分:0)

private ArrayList<ComputerPart> parts;
//Constructor
public ComputerKit(ComputerPart... cp){
    parts = new ArrayList<ComputerPart>(Arrays.asList(cp));
}

此外,除非您想要默认对象字符串表示,否则您应该覆盖toString()中的ComputerPart。像

这样的东西
public String toString(){
    return item + " " + price;
}