保持常量和枚举的正确位置是什么?

Abd*_*eed 4 java android

在应用程序开发中,我经常需要使用'Constants'和'Enums'。就我使用的策略而言,我将所有'Constants'保存在一个名为'Constants'的单独类中,但我不确定是否应该保留所有Enums在一个单独的类中,因为我使用“常量”?或者我应该在我需要的那些班级中保留枚举?或者我也应该将 Contants 类中的枚举保留为“静态”。我的问题是保留所有常量和枚举的正确位置是什么。

Swe*_*per 5

我会给你一些管理枚举的技巧。

  1. 将枚举放在其自己的文件中。

由于枚举通常有点小,而且您不会在其中编写大量代码,因此如果将它与其他代码放在同一个文件中,很容易错过它。如果你把它放在它自己的文件中,你只需要在文件资源管理器中查找你的枚举的名称,IMO 比在代码中查找它要容易得多。

  1. 善用包。

不要将所有枚举放在同一个包中(例如yourapp.enums),除非它们是相关的。就像处理类和接口一样,您将枚举文件放在合适的包中。或者,您可以将枚举放在合适包的子包中。例如,Color可以将枚举放入yourapp.graphics.enums包中。这只是让找到它们变得更加容易。

  1. 将非常密切相关的枚举放在一个文件中。

这才有意义,对吧?如果枚举密切相关,您通常需要编辑它们或添加一些方法或其他什么。因此,将相关的枚举放在一起很方便,这样您就可以在不打开新文件的情况下轻松编辑它们。

编辑:我没有注意到您还想知道在哪里存储常量。这里还有一些提示:

  1. 如果一个常量只在一个类中使用,则在该类中声明该常量。

来吧,这很明显。如果一个常量只用在一个类中,它可能不应该暴露给世界。就像,它只是更有意义。因此,请记住将这些类型的常量声明为private static final在同一个类中

  1. 如果一个常量在多个类中使用,请尝试对这些常量进行分类。

例如,如果你有一些共享的首选项键作为常量(你应该这样做),创建一个SharedPreferencesKeys类并将它们放在那里。

  1. 再次,使用包

这与枚举的想法基本相同。总是使用包来分类你的东西。

尽管如此,这些只是我自己的一些习惯。如果你不喜欢他们,没关系。


And*_*dan 4

我认为这里没有规则,我通常尝试在使用它们的地方保持恒定的值。尝试模块化您的代码,以便当您移动其中的一部分(执行特定操作的类)时,您不需要进入常量类并复制该模块使用的 N 个常量。

IE

如果我使用常量作为捆绑额外内容,我将保留在最终将执行 getExtra(...) 调用的 Activity 中

如果我使用共享首选项键,我还会将它们保留为常量,并将它们设置在活动或类中,或者在共享首选项中设置值的任何内容。

对于其他类型的常量,也尝试使用build.gradle文件,您将把它们放在一个地方。

例如

buildConfigField "String", "SUPPORT_EMAIL", '"support@mysite.com"'

你将访问它们BuildConfig.SUPPORT_EMAIL

甚至是资源值,例如: resValue "string", "branch_io_key", "key_live_xxxxx"

您可以像访问普通字符串资源一样访问它们R.string.branch_io_key

对于枚举:再次尝试将逻辑尽可能保留在特定包内,作为“模块”。例如,如果您创建一个自定义View,其中包含后台中任何内容的内置动画,并且您有一个用于View执行不同类型动画的枚举,您可以:

  1. 在某个地方有一个包,com.yourapp.ui.customviews.animatedView其中既有自定义视图类又有枚举,作为单独的文件
  2. 将您的枚举放在自定义视图类中

...因此,当您在另一个项目中重用视图时,您只需复制整个包或仅复制 View 类,并且您将确保已复制与该类相关的所有内容。

最后一件事:如果您使用字符串,比如说对话框,并且您有一些通用文本,例如“ok”,yes”,“no”,“cancel”,“success”,“没有可用的互联网连接”等,并且您已经将它们翻译成 X 种语言,请尝试将它们保存在单独的 .xml 文件中,以便您可以轻松地重用文本值。您只需在新项目中复制这些字符串文件即可查看长 .xml 文件并提取与对话框相关的字符串并将它们移动到新文件中。

所以总而言之,尝试尽可能将代码保留在模块中,并将所有内容保留在“内部”,将类似的内容放在一起。

至少这是我个人对待常量的方法,到目前为止还不错。