2011-02-04 50 views
2

什麼是一個Java對象,將有多個可能的數據類型進行建模的內存使用效率最高的方式: 例如最好的辦法Java對象與多個數據類型模型

public class Cell{ 

    short type 

    int _int 
    double _double 
    String _string 
} 

然後將此對象實例,並設置類型時,設置適當的值,同時保留所有其他值爲空。 (我懷疑這會採取即使空,除了字符串存儲?)

或者,

public class Cell 
{ 

    short type 
} 
public class StringCell extends Cell 
{ 
    String _string 

} 

其中每種類型的是,只有適當的數據類型,一些常見的類的子類。 (我懷疑會有一些頭部與子類相關的內存)

+0

你打算如何在字段設置(或設置爲空)後做些什麼?繼承聽起來像你想要的。單元格在所有類型中都會有一些共同的行爲?但是,根據細胞的類型,你會有一些特殊的行爲? – DaveJohnston 2011-02-04 16:53:39

+0

是的,對於所有的細胞和細胞特定的工作也會有常見的東西。 – 2011-02-04 17:11:23

+0

出於好奇,你在寫翻譯嗎? – finnw 2011-02-04 18:16:06

回答

2

這看起來像一個經典問題generics,因爲你說「設置類型設置適當的值,而其他所有的空值。

public class Cell<T> { 
    T value; 
} 

然後你就可以有...

Cell<String> stringCell = ... 
Cell<Integer> integerCell = ... 

如果單元格中實現良好的人機界面,你甚至可以有一個明確的異構類型細胞的集合。

0

你在想這個。如果你真的需要這個,然後堅持原語,並看看Flyweight pattern可以幫助。

0

如果您需要使用int,long,float和double基元,IS是使用基元本身的最有效方式。但是,將它們設置爲null是不可能的。簡單地在課堂上宣佈他們將佔用空間。

去一個子類的方法可能會工作,但這引出了一個問題,基類有什麼價值?我傾向於一個接口,每個原始類型有不同的實現。這樣你沒有繼承開銷(儘管我懷疑是否有),你只有你需要的原始。

我仍然懷疑你會在該接口上放置什麼。可能是某種Render方法?