Menu类中定义的一些常量的优点是什么?

时间:2011-08-04 21:40:08

标签: android constants

我正在阅读记事本教程:http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html

我注意到他们提供的用于添加菜单项的代码是

  menu.add(0, INSERT_ID, 0, R.string.menu_insert);

INSERT_ID早先定义为Menu.FIRST。当我在类中查找该常量时,它是一个设置为1的int。定义还有Menu.NONE,这是一个设置为0的int。

这让我想到了两件事:

  • 将Menu.FIRST定义为1,将Menu.NONE定义为0有什么用?为什么不在函数调用期间提供1和0?特别是因为......
  • 这基本上是他们在提供0的函数调用中所做的。为什么不使用Menu.NONE,因为他们遇到了提供局部变量中包含的另一个常量的麻烦?

从参考资料中我发现

android.view.Menu.add(int groupId, int itemId, int order, int titleRes)

其中:

  

groupID :此项应属于的组标识符。这个   也可用于定义批次状态更改的项目组。   如果某个项目不在群组中,则通常使用NONE。

     

itemID :唯一商品ID。 如果您不需要唯一ID,请使用NONE。

     

订单:商品的订单。 如果您不在乎,请使用NONE   订单。请参阅getOrder()。

     

titleRes :标题字符串的资源标识符。 [不重要   这个问题]

所以现在我更加困惑的是他们应该使用在一个地方提供的常量而忽略在另一个地方执行此操作的指令,所有这些都在同一个函数调用中。

1 个答案:

答案 0 :(得分:0)

通常,使用常量与硬编码文字相比具有一些优势。逻辑命名常量可以提高代码的可读性。在这种特殊情况下,它没有多大帮助,但

menu.add(Menu.NONE, INSERT_ID, Menu.NONE, R.string.menu_insert);

仍然比

更具可读性
menu.add(0, 1, 0, R.string.menu_insert);

定义和使用常量也有助于抽象实现细节。如果使用常量Menu.FIRST,那么您不必知道实现将第一行标识为1而不是0.如果更改了实现,则Menu.FIRST定义为0和Menu.NONE定义为-1,您无需返回并更改代码以适应更改。

在这种特殊情况下,它看起来像是一个草率编码的情况。代码在使用常量时不一致。