在许多类中使用Java共享常量字符串是否很好?

时间:2017-09-08 06:05:04

标签: java readability

我想在一个地方使用Java常量字符串并在整个项目中使用它们吗?我很困惑这是一个提高可读性的好习惯吗?

6 个答案:

答案 0 :(得分:2)

简单:当多个类需要相同的信息时,该信息应该只有一个“根”。

所以是的:为了避免在不同的地方重新声明相同的值,这绝对是良好的做法。拥有“全局”常量只会有助于避免代码重复 - 从而防止稍后出现错误,而您可能需要更改此类值。

答案 1 :(得分:2)

一个带有(不相关)常量的单个类有问题。这是一个瓶颈: 如果在团队中,在底部添加常量,则添加常量的其他人将收到VCS冲突。 强制声明按字母顺序排序。它还将此包以其他形式绑定在一起。还需要许多不需要的重新编译(另见最后的评论)。

带模块的java 9 中,你会在每个使用模块中需要require常量类模块,可能会导致不必要的模块图。

然后有一些常量不需要命名,仍然不是“魔术”。 在注释中作为参数。如果您需要唯一性,注释扫描可以收集这些值。

最后有共享常量。 靠近使用的构造仍然是我的最爱。

此外,常量类模式通常与String常量一起使用。代码味道很臭,因为它是一种繁荣的代名词 应该使用自动机制,OO,固定约定,声明性数据。

对于数据库表和列,存在更好的机制。

具有常量(仍然)的类具有技术编译问题,在java中,常量包含在.class文件本身中,导入消失。因此,更改原始常量不会通知编译器重新编译“using”类。在重新编译常量类之后,需要完全干净的构建。

答案 2 :(得分:1)

如果您认为您的字符串将在许多流程中被引用,那么使用它是很好的。此外,它也是一种被广泛接受的做法。

答案 3 :(得分:1)

创建Interface& amp;声明你的全部不变。 E.G

public interface ICommonConstants {
    public static final String ENCODING_TYPE_UTF8="UTF-8";
} 

在您想要使用常量的所有类中实现此接口。您可以通过调用

来使用
ICommonConstants.ENCODING_TYPE_UTF8

答案 4 :(得分:1)

代码重复是一个代码气味,如果你不使用现成的常量,你需要使用它一遍又一遍地重新声明String,这很糟糕。

这会导致代码的可维护性降低,因为当重复的String需要更改而您忘记在其中一个类中更新它时,代码会中断。

通常的做法是设置一个包含可重用常量的类:

public final class MyDefs {
    public static final String A = "a";
    public static final String B = "b";

    private MyDefs() {
        // Utility class, don't initialize.
    }
}

答案 5 :(得分:1)

我会推荐一个Enum,或者你可能就像一个只有静态最终字符串的实用程序类。一切都取决于你想要的,我猜,我没有看到任何坏事。如果班级将被许多班级共享,那很好。