在数组

时间:2015-12-23 14:16:07

标签: java

如何在阵列中存储2个不同的对象?因此,当我有对象Worker(“name”,“age”,Payroll)时,则另一个对象是Computer(“price”,“specification”,“...”)。我将这些对象存储在一个类中。

class Record
{
  top = -1;
  private Worker array_w[];
  private Computer array_c[];

但是我必须这样做:

 public void insert(Worker number) {
    if ((top + 1) < array_w.length)
     { top += 1; array_w[top] = number; }

 public void insert(Computer number) {
    if ((top + 1) < array_c.length)
     { top += 1; array_c[top] = number; }
 }

将每个对象插入到新类中。

如何制作它只有一个存储任何对象的数组。

5 个答案:

答案 0 :(得分:6)

我建议不要混合对象,但是如果你必须有一个数组,那么你可以做一些事情:

让两个对象继承相同的Object,或实现相同的接口:

public class Worker extends MyMainClass
public class Computer extends MyMainClass

OR

public class Worker implements IMyInterface
public class Computer implements IMyInterface

然后你有:

MyMainClass[] myArray;

OR

IMyInterface[] myArray;

(最好是界面)

或者,如果工人和计算机齐头并进,请编写一个包装器并将两者插入相同的索引中。

public class Wrapper {
    private Worker worker;
    private Computer computer;
    ...
}

public void insert(Wrapper wrapper) {
    ...
}

然后你有一个数组:

Wrapper[] myArray;

答案 1 :(得分:3)

这不是一个好的设计,但如果你想,那么你可以做的就是

首先创建一个界面:

public class Worker implements MarkerInterface {
   ...
   @Override 
   public String print() {
       return "worker class what ever you want to print"
   }
}

public class Computer implements MarkerInterface {
   ...
   @Override 
   public String print() {
       return "computer class what ever you want to print"
   }
}

然后使用它来实现两个类

public class Record
{
    MarkerInterface[] objects = new MarkerInterface[10];
    ...
}

现在在Record class

中创建一个数组
if(obj isinstanceof Computer) {...} else if(obj isinstanceof Worker) {...} 

现在,您可以实例化MarkerInterface类型的数组并存储它们。

请记住,当您想要使用数组中的对象时

System.out.println(obj.print());

或者如果在界面中定义了方法,那么您只需执行

{{1}}

答案 2 :(得分:2)

我假设您在Computer和Worker类之上有一个通用接口或类。如果是这种情况,您可以执行以下操作:

 MyTopInterface[] array = ..

现在你可以使用相同的数组并在其中填充工人或计算机对象。

答案 3 :(得分:1)

可以使用Object数组或共享基类

 private Object [] data;

然后你到处都有instanceof Computerinstanceof Worker。想想“每个工人有多少台计算机?” - 简单划分与循环计数。

我的建议:保持独立的成员。也许List <Computer>而不是数组偶数。

答案 4 :(得分:1)

除了所有其他优秀(在某些情况下)建议之外,您总是可以创建一个可以容纳两种类型的mashup类。

class OneOf<A, B> {

    A a;
    B b;

    public A getA() {
        return a;
    }

    public OneOf setA(A a) {
        this.a = a;
        this.b = null;
        return this;
    }

    public B getB() {
        return b;
    }

    public OneOf setB(B b) {
        this.b = b;
        this.a = null;
        return this;
    }

    @Override
    public String toString() {
        return a != null ? Objects.toString(a) : Objects.toString(b);
    }

}