Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 具有已知数据类型的对象数组_Java - Fatal编程技术网

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

Java 具有已知数据类型的对象数组,java,Java,我目前正在做一个项目,我有一个对象数组。我知道数组将存储以下类型:产品、食品、衣服(食品和衣服都是产品的子类)。问题是,我试图从数组(条形码)中访问对象的属性,但当我尝试这样做时,它会给我一个错误,并说“类型对象的条形码未定义” 我怎样才能解决这个问题 我不能为每种类型创建单独的数组,因为当我添加更多的类和类型时,它将不可伸缩 谢谢 对。未来的类也将是产品的子类 这是代码的一个实例。唯一的问题是getBarCode()的行(这是Product类的一个方法) 私有对象arr[]=super.get

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

我怎样才能解决这个问题

我不能为每种类型创建单独的数组,因为当我添加更多的类和类型时,它将不可伸缩

谢谢

对。未来的类也将是产品的子类

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

私有对象arr[]=super.getArray();
公共无效排序(INTC)
{
对象aux;
int min=999,poz;
对于(int i=0;i
从阵列访问对象时,您可以做的是比较对象类型

像这样:

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

或者,如果要放入此数组的所有对象都是Product的子类,只需创建一个arrayList来使用Products,如new arrayList(),然后在此调用barcode方法。

如果可以保证方法
barcode
存在于
Product
及其子对象上,然后您可以使用
产品的数组来代替

如果您想使用特定的子类方法,您必须处理任何类型的精细转换,但这至少可以让您在所有元素上调用相同的方法,而不必太担心

只要
getArray
可以更改为return
Product
,您就可以编写以下代码:

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

您也可以将
aux
更改为
Product
的一种类型。

我们可以查看代码吗将来的所有类也都是
Product
的子类吗?在通过
instanceof
检查哪个是
后,您必须将
对象
强制转换为
Product
Food
衣服
,或者您创建一个抽象超类并在其中定义您的
条码
,它表示它不能将Object转换为Product您不能将Object[]数组转换为Product[]数组,但您可以将Object成员转换为Product<代码>产品p=(产品)o
您的阵列访问方法不正确-应该是
阵列[0]
或需要访问的任何位置
get
可在
列表中找到
@Makoto fixed,不记得问题是否有数组或数组列表
private Product[] arr = super.getArray();