具有已知数据类型的对象数组

时间:2014-11-29 00:43:10

标签: java

我目前正在开发一个项目,我有一个对象数组。我知道阵列将存储以下类型:产品,食品,衣服(食品和衣服都是产品的子类)。问题是我试图从数组(barCode)访问对象的属性,但是当我尝试这样做时,它给了我一个错误,并说“对于类型Object,未定义”barCode“。

我该如何解决这个问题?

我无法为每种类型创建一个separates数组,因为当我添加更多的类和类型时,它不可扩展。

谢谢!

是肯定的。未来的课程也将是产品的子课程

这是代码的一个实例。唯一的问题是使用getBarCode()(这是Product类的方法)

private Object arr[] = super.getArray();

public void sort(int c)
{
    Object aux;
    int min = 999, poz;

    for(int i = 0; i < super.getIndex() - 1; i ++)
    {
        for(int j = i; j < super.getIndex(); j ++)
        {   
            if( arr[j].getBarCode() < min)
            {
                min = arr[j].getBarCode();
                poz = j;
            }
        }
        aux = arr[i];
        arr[i] = arr[poz];
        arr[poz] = aux;
    }
}

2 个答案:

答案 0 :(得分:1)

如果您可以保证barCode及其子级上存在方法Product,那么您可以使用Product数组来代替。

如果你想使用特定的子类方法,你将不得不处理你想要做的任何类型的繁琐投射,但这至少可以让你在所有元素上调用相同的方法而不用太担心。

只要getArray可以更改为返回Product,就可以写下:

private Product[] arr = super.getArray();

您也将aux更改为Product类型。

答案 1 :(得分:0)

从数组访问对象时,您可以做的是比较对象类型。

像这样:

Object o = array[0];
if(o.getClass().equals(Product.class)) {
   Product p = (Product)o;
   p.getBarcode();
}

或者,如果您放入此数组的所有对象都是Product的子类,只需将arrayList设置为使用Products,例如new ArrayList(),然后调用条形码方法。