2010-09-01 70 views
6

道歉,如果这最终是一个愚蠢的问题,但我只是想知道这是为什么在记事本练习1教程(http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html)的第9步完成...的Android记事本练习1个教程和Menu.FIRST

public static final int INSERT_ID = Menu.FIRST; 

...然后INSERT_ID被随处使用,而不是直接使用Menu.FIRST而不是直接使用?

我想我不想创建任何新的变量,如果我不需要,尤其是当他们已经是静态最终。

创建INSERT_ID是否昂贵?

+3

有没有愚蠢的问题! – Key 2010-09-01 08:02:30

回答

3

因为如果您在任何地方都使用Menu.First,则会决定在菜单中移动该选项,以便它不再是您需要更新所有参考的第一项。这样你只需要在一个地方更新它,而更明智的INSERT_ID将反映你在其他地方所做的更改。

至于创建新变量的性能问题:是的,创建变量会占用一个(微不足道的)CPU时间量,并且存储该变量会占用(无足轻重)的内存量,但您应该在代码可读性之前,不要将性能放在可执行代码之前,直到您确定已经遇到了瓶颈 - 您将处于非常有限的环境中,因为这会成为任何接近问题的环境。

最后,很多编译器都会内联引用INSERT_ID。这意味着所有对INSERT_ID的引用都将在编译时被Menu.First中的值替换,并且该变量永远不会被创建。我不太清楚Android编译器是否可以肯定地说某种方式,但如果它不这样做,我会感到惊讶。

+0

好吧,来自Java Swing开发,我不必担心系统资源等问题,我需要进行Android开发(基于观看2010年Google I/O的视频)。我实际上已经意识到你提到的几点(虽然一个好的代码编辑器可以搜索/替换Menu.FIRST到你想要的任何新值很容易),通常我在代码可读性方面真的很大,但正如我所说,认为对于Android开发,我定义/实例化的变量越少越好。 感谢您的回复。 – 2010-09-01 08:43:23

+0

我明白@Martin Harris说的,但我不明白为什么我会使用Menu.FIRST。无法将INSERT_ID声明为INSERT_ID = 1;? – prostynick 2013-03-13 08:56:51

+1

@prostynick因为较新版本的Android框架可能会更改底层的菜单实现,因此Menu.FIRST变为0或-1或456.这可能永远不会发生,因为太多的应用程序将很难编码为1,但使用const为您提供可读性(INSERT_ID是菜单中的第一项,不是“1”,可能是第一个或第二个项目,具体取决于您如何编制索引)和零成本的无风险未来兼容性 - 所以为什么不使用它? – 2013-03-13 09:29:48