我正在尝试从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/

10-11 22:20
查看更多