设计一个枚举

时间:2012-02-29 04:32:10

标签: java enums

我正在编写一个代码,其中我需要filesize和filesize单元。让我们说如果有人在调用我的函数,他就会调用它 myfun (3, MB)

这意味着预期的文件大小为3 MB。我想把这个“文件单元”放在枚举

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

现在问题是将给定大小转换为字节。当然,我可以做简单的数学运算,但我想要更多的东西。所以,如果somene称我为

这样的函数,那就说吧

myfun (3, MEGABYTE) 在我的代码中,我只想3 * MEGABYTE将其转换为BYTE单元。

我不确定这是否可能......我只想到一种可能性。枚举中可能有一个方法,它采用其单位并进行计算? (我不想做那些微不足道的事情,应该有足够通用的东西)。

2 个答案:

答案 0 :(得分:4)

您可以这样做:

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)

答案 1 :(得分:0)

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.