лучший способ для моделирования Java-объекта с несколькими типами данных - PullRequest
2 голосов
/ 04 февраля 2011

Какой самый эффективный способ памяти моделировать объект Java, который будет иметь несколько возможных типов данных: например,

public class Cell{

   short type

   int _int
   double _double
   String _string
}

Затем создать экземпляр этого объекта и при установке типа установить соответствующее значение, оставляя все остальныеноль.(Я подозреваю, что это займет память, даже если null, кроме String?)

Или

public class Cell
{

   short type
}
public class StringCell extends Cell
{
   String _string

}

Где каждый тип является подклассом некоторого общего класса, который имеет только соответствующий тип данных.(Я подозреваю, что будет немного памяти, связанной с подклассами)

Ответы [ 3 ]

2 голосов
/ 04 февраля 2011

Это похоже на классическую проблему для generics , поскольку вы говорите: «установка типа устанавливает соответствующее значение, оставляя все остальные значения пустыми».

public class Cell<T> {
    T value;
}

Тогда вы можете иметь ...

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

Если бы Cell реализовал хороший интерфейс, вы могли бы даже иметь четко определенный набор разнородных типизированных Ячеек.

0 голосов
/ 04 февраля 2011

Если вам нужно работать с примитивами типа int, long, float и double, самый эффективный способ - использовать сами примитивы. Однако установить их в ноль невозможно. Простое объявление их в классе займет место.

Использование подхода подкласса может сработать, но возникает вопрос: какое значение имеет базовый класс? Я бы склонялся к интерфейсу, с разными реализациями для каждого примитивного типа. Таким образом, у вас нет накладных расходов на наследование (хотя я сомневаюсь, что они есть) И у вас есть только тот примитив, который вам нужен.

Я все еще сомневаюсь, что вы положите на этот интерфейс, хотя. Возможно, какой-то метод Render?

0 голосов
/ 04 февраля 2011

Ты слишком обдумал это. Если вам это действительно нужно, то придерживайтесь примитивов, а также посмотрите, может ли шаблон Flyweight помочь.

...