Разработка Enum - PullRequest
       5

Разработка Enum

0 голосов
/ 29 февраля 2012

Я пишу код, в котором мне нужен размер файла и размер файла. Допустим, если кто-то вызывает мою функцию, он будет вызывать ее myfun (3, MB)

Это означает, что ожидаемый размер файла будет 3 МБ. Я думаю, чтобы поместить этот «файловый блок» в перечисление

public enum SizeUnit {BYTE, KILOBYTE, MEGABYTE, GIGABYTE}

Теперь проблема заключается в преобразовании заданного размера в байты. Конечно, я могу сделать простую математику, но я хочу что-то более родовое. так скажем, если Сомен назвал меня функцией, как

myfun (3, MEGABYTE) в моем коде я хочу просто 3 * MEGABYTE преобразовать его в BYTE единицу.

Я не уверен, возможно ли это ... Я просто думаю об одной возможности. Может быть в enum метод, который берет свою единицу и делает ли расчет? (я не хочу делать тривиальный, должно быть что-то достаточно общее).

Ответы [ 2 ]

4 голосов
/ 29 февраля 2012

Вы можете сделать что-то вроде этого:

public enum SizeUnit
{
  BYTE(1),
  KILOBYTE(1024),
  ...;

  private final int bytes; 
  private SizeUnit(final int bytes) { this.bytes = bytes; }
  public int getByteCount() { return this.bytes; }
}

Затем вы можете сделать что-то вроде:

3 * KILOBYTE.getByteCount();

или даже определить метод с именем getBytes, который передает число.Так что KILOBYTE.getBytes(3).

0 голосов
/ 29 февраля 2012

TimeUnit делает нечто подобное, у него есть метод, который преобразует в базовый блок, в вашем случае байтов.

Я использую

 3 * 1024 // as 3 KB
 3 * 1024 * 1024 // as 3 MB

Это дает понять, что я имел в виду

 3 * 1000 // as 3 KB of disk space.
 3 * 1000 * 1000 // as 3 MB of disk space.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...