【问题标题】:What does dollar followed by an index mean in a class name?美元后跟索引在类名中是什么意思?
【发布时间】:2011-12-20 12:40:20
【问题描述】:

我正在分析一个 java 应用程序,并且最大数量的已分配对象具有名称 com.x.y.ClassName$5.

netbeans 分析器和 yourkit 都使用相同的命名约定。 我不知道如何用谷歌搜索命名问题。

类名后面的$5是什么?

编辑: 似乎 $5 是声明的第五个匿名类。我在生成的类上使用了javap 来查找哪个是第五个匿名类。参考在How to match compiled class name to an enum member in Java?

【问题讨论】:

    标签: java naming-conventions


    【解决方案1】:

    com.x.y.ClassName$5 表示“com.x.y.ClassName 中的第五个匿名内部类”

    【讨论】:

    • 哇,快速回答。有没有办法判断哪个内部类是第 5 个?
    • 我不知道有什么方法可以做到这一点。所以我对自己的答案不满意。说“第五”而不说具体顺序,就像说“一个随机数”。但是,如果你有像JD 这样好的反编译器,可以向你展示任何内部类的代码
    • 我认为这是声明它们的顺序...无论如何,您可以覆盖 toString() 以在调试器中提供一些有意义的表示。
    • @fortran toString 方法将如何更改类名?
    • @bbaja42 它根本不会更改类名,但在大多数 IDE 中,如果您将鼠标悬停在活动对象上,它将显示其 toString() 表示(默认情况下是类名和一些哈希)。
    【解决方案2】:

    一些links 来帮助你。 也看polygenelubricant's的回答

    您将获得 com.x.y.ClassName$5。当你的类包含一个匿名内部类

        sample8.class
        sample8$1.class
        sample8$2.class
        sample8$klass.class
        sample8$klass$1.class
    

    例子

       public class sample8 {
    
    
            private class klass{
                void vodka() {
                    sample8 _s = new sample8() {
    
                    };
    
                }
            }
            sample8() {
                   klass _k = new klass();
                  _k.vodka();
               }
    
    
        public static void main(String args[])
        {
        }
    
        sample8 _s = new sample8() {
    
        };
    
        sample8 _s1 = new sample8() {
    
        };
    }
    

    【讨论】:

    • AFAIK 会导致 ClassName$klass,而不是 ClassName$
    • 谢谢你说得对。如果存在匿名内部类,它会创建一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2010-11-05
    • 2015-02-15
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多