当前位置: 首页 > 面试题库 >

为什么getClass返回类的名称+ $ 1(或$ *)

唐向荣
2023-03-14
问题内容

我正在编写一段代码,如果它是某个类的实例,则必须在其中强制转换。

和往常一样,我instanceof用于检查兼容性。

问题在于,由于对象属于“奇怪”类,因此永远无法满足检查要求。

例如;
当我getClass().getSimpleName()在此对象上调用方法时,它将返回类+的名称$*(例如ViewPart$1而不是ViewPart)。

这是什么$*意思?有解决方案或解决方法吗?


问题答案:

那显示一个 内部类 (匿名(如果有数字)或命名)。例如:

class Foo {
    static class Bar {
    }
}

班级的名称Foo.BarFoo$Bar。现在,如果我们有:

class Foo {

    static void bar() {
        Runnable r = new Runnable() {
            public void run() {};
        };

        System.out.println(r.getClass());
    }
}

那将打印出来Foo$1

您可以在javac创建的类文件的命名中看到相同的效果。



 类似资料:
  • 我正在编写一段代码,如果对象是某个类的实例,我必须在其中强制转换它。 像往常一样,我使用检查兼容性。 问题是检查永远不会满足,因为对象属于“奇怪”类。 例如当我调用方法在这个对象上,它返回类的名称(例如而不是)。 这是什么意思?是否有解决方案或解决方法?

  • 问题内容: 我在一个子类中,当我尝试查找超类的名称时,我尝试了super.getClass(),但它仅返回了子类的名称。为什么? 问题答案: 应该做。

  • 现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。

  • 问题内容: 我正在运行程序 我得到的输出是。 我不明白这条线 子女的父母的PID为1 应该是3071? 问题答案: 因为在孩子要求其父母的pid之前,父进程已完成。 进程完成后,其所有子级都将重新分配为init进程的子级,其pid为1。 尝试使用父母的代码来等待孩子执行。然后,它应该会按预期工作。

  • 问题内容: 在下面的程序中,你可以看到.5除以外的每个值都略小于四舍五入的值0.5。 版画 我正在使用Java 6 update 31。 问题答案: 摘要 在Java 6(可能更早)中,实现为。1 这是一个规范错误,恰恰是这种病理情况。2 Java 7不再强制执行此无效的实现。3 问题 0.5 + 0.499999999999999999994的双精度正好为1: 这是因为0.49999999999

  • 问题内容: 为什么此代码有时返回1E + 1,而对于其他输入(例如17)却没有以科学计数法打印输出? 问题答案: 使用bigDecimal.toPlainString(): 输出: