- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在为脚本结果编写一些自定义流阅读器时,类中存在相当多的常量(主要用于预期的标签和关键字),我想知道是否有任何类型的标准、约定或最佳实践将常量(在此处阅读 static final
字段)放入类中?
更具体地说,是将每个常量放在类的顶部,还是将它们分组在类中有用的区域,并将公共(public)项放在顶部?
通过将所有内容都放在顶部,在我看来,这可能更容易在同一位置找到您要查找的所有内容,但如果该区域变大,它可能会让人不知所措:
public class Test {
// Constants.
private static final String CLASSNAME = Test.class.getSimpleName();
private static final String COMMON = " = ";
private static final String CONSTRUCTOR = "#constructor";
private static final String METHOD_1 = "#method1";
private static final String METHOD_2 = "#method2";
public Test(String message) {
System.out.println(CLASSNAME + CONSTRUCTOR + COMMON + message);
method1(message);
method2(message);
}
private void method1(String message) {
System.out.println(CLASSNAME + METHOD_1 + COMMON + message);
}
private void method2(String message) {
System.out.println(CLASSNAME + METHOD_2 + COMMON + message);
}
public static void main(String[] args) {
new Test("Hello world!");
}
}
通过将它们分组,对于仅在类的特定区域中使用的常量更有意义,但它可能会破坏按类型分组添加到类中的良好对称效果,并且可能会使它看起来凌乱:
public class Test {
// Common constants.
private static final String CLASSNAME = Test.class.getSimpleName();
private static final String COMMON = " = ";
// Constructor constants.
private static final String CONSTRUCTOR = "#constructor";
public Test(String message) {
System.out.println(CLASSNAME + CONSTRUCTOR + COMMON + message);
method1(message);
method2(message);
}
// Constant proper to method1(...).
private static final String METHOD_1 = "#method1";
private void method1(String message) {
System.out.println(CLASSNAME + METHOD_1 + COMMON + message);
}
// Constant proper to method2(...).
private static final String METHOD_2 = "#method2";
private void method2(String message) {
System.out.println(CLASSNAME + METHOD_2 + COMMON + message);
}
public static void main(String[] args) {
new Test("Hello world!");
}
}
输出:
Test#constructor = Hello world!
Test#method1 = Hello world!
Test#method2 = Hello world!
我知道这可能是一个主观的问题,但我主要想知道是否有任何(非)官方文件说明这一点,或者上述哪些场景被认为是最佳实践并且对工作更有吸引力对于普通程序员。
请注意,Javadoc 已被丢弃以简化上述示例代码。
最佳答案
Oracle 站点上有一组标准约定。有一个 reference to how to layout the source code将静态变量放在实例变量之前,但常量没有什么特别之处。
Oracle 的风格指南自 1999 年以来就没有更新过,并且上面有一个信息可能不再有效的警告。 Google has a more up-to-date style guide ,它说:
3.4.2 Class member ordering
The ordering of the members of a class can have a great effect on learnability, but there is no single correct recipe for how to do it. Different classes may order their members differently.
What is important is that each class order its members in some logical order, which its maintainer could explain if asked. For example, new methods are not just habitually added to the end of the class, as that would yield "chronological by date added" ordering, which is not a logical ordering.
通常的做法是将常量放在最前面,但没有绝对的要求。如果您有很多常量并且需要组织它们,将它们分组到枚举中是一种替代方法。
关于java - 将常量放在类中的位置 : standards and best practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413301/
我试图为此搜索答案,但我发现很难找到这种“确切”的例子。我对指向指针的指针知之甚少,我觉得除了指向某物的指针之外,还有更多东西隐藏在它的表层之下。 那么你们会如何翻译呢? void free(sham
我有一个类的属性,比如const CFoo &bar() const,这是什么意思? 最佳答案 bar 方法返回对 const CFoo 的引用(即 bar 之前的 const CFoo & 部分),
例如是 int const x = 3; 有效代码? 如果是的话,意思是一样的 const int x = 3; ? 最佳答案 它们都是有效的代码并且它们都是等价的。对于指针类型,尽管它们都是有效代码
我知道 f(const T& obj) // (1) g(T const& obj) // (2) 是一样的。(我们不能改变f和g中obj的值)。 但是什么 h(T & const) // (3) 真
本节讲解的内容 include和include_once require和require_once 常量 引入文件和常量结合案列 变量操作函数 输出语句 前言 在上篇文章中,我们讨论了函数的应用,但是
我们知道我们可以保护变量的值,因此用户无法更改现有变量的值!这对对象来说没有什么问题吗?? 例如.. const x = 5; x = 10; alert(x) // will be returned
我正准备为 CUDA 设备编写直方图内核。它基于 NVIDIA's paper . 这个想法是每个线程计算某个部分(在我的例子中是体积)的部分直方图并将其写入共享内存块。然而,我遇到了一个奇怪的算法问
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。 常量可以被当作常规的变量,只是它们的值在定义后不能被修改。 整数常
在这种情况下,如何识别是否有变量或字面量传递给函数 f()? 如何实现passed_as_constant()检查(见下面代码)? sub f { my $refStr=\$_[0]; ret
我目前想知道如何在 python 中列出 win32com 中的常量, 例如使用 excel win32com.client.Dispatch('Excel.Application') 有没有办法使用
这个问题在这里已经有了答案: PHP | define() vs. const (9 个回答) 关闭8年前。 在 PHP 中遇到常量问题想知道是否有人可以解释: 这行得通 const _ROOT =
我正在学习 Rust,到目前为止,似乎有 3 种声明变量的方法: const A: u8 = 42; static A: u8 = 42; let A: u8 = 42; 我知道你不能有一个可变的 c
我正在使用函数模板 void _createAttr(T)(args..., in T[]) 并使用 测试 T 的类型函数中的 static if(is(T == char)) 。当我打电话时, _c
这可能是一个天真的问题,我怀疑答案是"is",但我没有运气在这里和其他地方搜索“erlang编译器优化常量”等术语。无论如何,erlang 编译器是否可以(将)在编译时创建一个常量或文字的数据结构,并
我刚遇到这段 Java 脚本代码: const { myKey, uname, issorted, title, hClick, } = this.props; 请告诉我这是什么意
我正在努力实现以下目标: 我有一个父类,有一些逻辑。在子类中,我“重新定义”常量/属性。有没有办法让子属性可以通过父类中定义的方法访问?或者更具体地说 - 有什么方法可以强制“out”方法在下面的示例
如果这是个愚蠢的问题,请原谅。 我有一个带有内部类接口(interface)的“fragment ”外部类。该接口(interface)仅由另一个 Activity 类使用“implements Ou
我是 python 新手,尝试使用默认值并为类实例自定义它们。 因此,在这个示例中,我定义了一个 DEFAULT_STRING 和一个 DEFAULT_SETTINGS 变量,可以使用 customi
在 integer.xml 中,其形式为 0x001 0x002 是代码和 xml 文件都需要的存储常量。 C# 识别 Droid.Resource.Integer.foo,但它有一些大的
是否有跨平台(即跨 Linux、BSD 和 OS X,最好是所有 POSIX)我可以纯粹基于字符串 以编程方式访问诸如 O_RDWR 之类的常量>“O_RDWR”?我正在编写一些(非 C)代码,这些代
我是一名优秀的程序员,十分优秀!