首页 > 解决方案 > 解释 synchronized() 内部的 Commons Lang 代码?

问题描述

我正在尝试从 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);
            }
        }
    }
}

有人能解释一下 synchronized() 里面的代码吗?特别是所有的'$'

标签: javasynchronized

解决方案


$是一个有效的标识符字符,所以它只是名称的一部分。

请注意,$不鼓励使用 of。Java 语言规范,第3.8 节。标识符说:

“Java 字母”包括大写和小写 ASCII 拉丁字母A-Z( \u0041-\u005a) 和a-z( \u0061-\u007a),以及出于历史原因的 ASCII 美元符号 ( $, or \u0024) 和下划线 ( _, or \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) {
    ...
}

推荐阅读