如何在阵列中存储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; }
}
将每个对象插入到新类中。
如何制作它只有一个存储任何对象的数组。
答案 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 Computer
和instanceof 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);
}
}