Android 什么';菜单类中定义的一些常量的优点是什么?

Android 什么';菜单类中定义的一些常量的优点是什么?,android,constants,Android,Constants,我正在学习记事本教程: 我注意到他们提供的添加菜单项的代码是 menu.add(0, INSERT_ID, 0, R.string.menu_insert); INSERT_ID先前定义为Menu.FIRST。当我在类中查找该常数时,它是一个int设置为1。这里还定义了Menu.NONE,它是一个设置为0的整数 这让我想知道两件事: 将Menu.FIRST定义为1,将Menu.NONE定义为0有什么用?为什么不在函数调用期间只提供1和0?特别是因为 这基本上就是他们在提供0的函数调用中所

我正在学习记事本教程:

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

  menu.add(0, INSERT_ID, 0, R.string.menu_insert);
INSERT_ID先前定义为Menu.FIRST。当我在类中查找该常数时,它是一个int设置为1。这里还定义了Menu.NONE,它是一个设置为0的整数

这让我想知道两件事:

  • 将Menu.FIRST定义为1,将Menu.NONE定义为0有什么用?为什么不在函数调用期间只提供1和0?特别是因为
  • 这基本上就是他们在提供0的函数调用中所做的为什么不使用Menu.NONE呢?因为他们麻烦地提供了包含在局部变量中的另一个常量?
从参考资料中我发现

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

groupID:此项应属于的组标识符。这 也可用于定义批处理状态更改的项目组。 如果项目不应在组中,则通常使用“无”。

itemID:唯一的项目ID。如果不需要唯一ID,请使用NONE。

订单:项目的订单如果不关心,请使用NONE 订单。请参阅getOrder()

标题:标题字符串的资源标识符。[对我来说不重要 [本问题]


因此,现在我特别困惑的是,他们应该使用在一个地方提供的常量,而忽略在另一个地方这样做的指令,都在同一个函数调用中。

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

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

menu.add(0, 1, 0, R.string.menu_insert);
定义和使用常量还有助于抽象实现细节。如果使用constant Menu.FIRST,则不必知道实现将第一行标识为1而不是0。如果更改了实现,将Menu.FIRST定义为0,将Menu.NONE定义为-1,则无需返回并更改代码以适应更改


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

顺便说一句,如果这个问题可以推广到菜单类之外的有用内容,我很乐意重新表述。谢谢,我有点怀疑出了什么问题。