我正在尝试从JakartaCommons-lang重写一段代码,因为我们有一个需要尽可能少地依赖的程序包
static void unregister(Object value) {
Set registry = getRegistry();
if (registry != null) {
registry.remove(new IDKey(value));
synchronized(class$org$apache$commons$lang$builder$HashCodeBuilder == null ? (class$org$apache$commons$lang$builder$HashCodeBuilder = class$("org.apache.commons.lang.builder.HashCodeBuilder")) : class$org$apache$commons$lang$builder$HashCodeBuilder) {
registry = getRegistry();
if (registry != null && registry.isEmpty()) {
REGISTRY.set((Object)null);
}
}
}
}
有人可以解释sync()中的代码吗?特别是所有的“ $”
最佳答案
$
是有效的标识符字符,因此它只是名称的一部分。
请注意,不鼓励使用$
。 Java语言规范的3.8. Identifiers部分说:
“ Java字母”包括大写和小写的ASCII拉丁字母A-Z
(\u0041-\u005a
)和a-z
(\u0061-\u007a
),并且由于历史原因,还包括ASCII美元符号($
或\u0024
)和下划线(_
或\u005f
)。美元符号仅应在机械生成的源代码中使用,或极少用于访问遗留系统上的现有名称。下划线可以用于由两个或多个字符组成的标识符中,但由于是关键字,因此不能用作一个字符的标识符。
如果改用_
,对您来说更易读吗?
synchronized (class_org_apache_commons_lang_builder_HashCodeBuilder == null ? (class_org_apache_commons_lang_builder_HashCodeBuilder = class_("org.apache.commons.lang.builder.HashCodeBuilder")) : class_org_apache_commons_lang_builder_HashCodeBuilder) {
...
}
或更短的名字?
synchronized (builderClass == null ? (builderClass = getClass("org.apache.commons.lang.builder.HashCodeBuilder")) : builderClass) {
...
}
关于java - 解释shared()内部的Commons Lang代码吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59726423/