2015-12-23 66 views
2

如何在數組中存儲2個不同的對象?因此,當我有例如對象工人(「名稱」,「年齡」,工資),然後另一個對象是計算機(「價格」,「規範」,「...」)。我將這些對象存儲在一個類中。在數組中存儲2個不同的對象

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; } 
} 

每個對象插入到新類。

我該如何使它只有一個存儲任何對象的數組。

+1

我想你可以有一個'對象'的數組,但我不會推薦它。混合兩個不同的對象並不是一個好主意,表面上看起來彼此沒有任何關係。 –

+1

就像一個註釋,除非你已經聲明數組有額外的空間(在這種情況下,你將不得不跟蹤),否則當你添加到索引'top + 1'的數組時,數組不會自動增長。您可能需要考慮使用ArrayList或類似的數據結構來按需添加/刪除項目。 – element11

+0

那麼我想打印類記錄中的每個對象。而我現在無法打印它,因爲有兩個數組,但是當我只有一個對象類型(Worker)時,我有一個數組並且程序工作。所以我試圖只有一個數組。這也是更少的代碼,因爲我不必輸入所有內容兩次。 – Daniel

回答

6

我會建議對混合對象,但如果你必須有一個陣列,也有一些事情可以做:

有兩個對象繼承相同的對象,或實現相同的接口:

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

可能最好使用集合而不是Array []。 – Eugene

+0

我正在嘗試使用界面。但我不知道如何在類Record中創建數組。 – Daniel

+1

@丹尼爾檢查http://stackoverflow.com/a/34437681/1085186 – StackFlowed

2

我假設你有一個通用的接口或類以上的計算機和工人類。如果是這樣的話,你可以這樣做:

MyTopInterface[] array = .. 

現在,你可以只使用相同的數組,並在其中填充任何工作人員或計算機對象。

3

這不是一個很好的設計,但如果你想那麼你可以做的是有

首先創建一個接口:

public interface MarkerInterface { 
    public String print(); 
} 

然後用它來實現這兩個類

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" 
    } 
} 

現在在Record類中創建一個數組

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

現在您可以實例化MarkerInterface類型的數組並存儲它們。

記住,當你要使用的對象從數組,你需要做的

if(obj isinstanceof Computer) {...} else if(obj isinstanceof Worker) {...} 

,或者如果方法是在界面定義,那麼你可以簡單地做

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

可能使用Object的數組或共享基類

private Object [] data; 

,但你會有instanceof Computerinstanceof Worker到處都是。想一想「每個工人有多少臺計算機?」 - 簡單的分區與循環和計數。

我的建議:保持獨立的成員。也許List <Computer>而不是偶數。

1

除了所有的你總是可以創建一個混搭類,可容納兩種類型的任何其他優秀(在某些情況下)的建議。

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); 
    } 

} 
相關問題