我想在一个地方使用Java常量字符串并在整个项目中使用它们吗?我很困惑这是一个提高可读性的好习惯吗?
答案 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
,或者你可能就像一个只有静态最终字符串的实用程序类。一切都取决于你想要的,我猜,我没有看到任何坏事。如果班级将被许多班级共享,那很好。