当前位置: 首页 > 知识库问答 >
问题:

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

公良天逸
2023-03-14

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

像往常一样,我使用instanceof检查兼容性。

问题是检查永远不会满足,因为对象属于“奇怪”类。

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

这是什么意思?是否有解决方案或解决方法?

共有3个答案

郎泰平
2023-03-14

$表示内部类。例如考虑两个类

public class TopClass {
  class SubClass {
     // some methods
  }// inner class end
} // outer class end

如果你编译这段代码,你会得到两个类文件。类和TopClass$子类。班

检查你的ViewPart类是否有任何内部类。希望有帮助。

孙池暝
2023-03-14

这些是匿名类的实例ViewPart$1ViewPart中定义的第一个匿名类,但这并不意味着它是ViewPart的子类。它很可能是某个侦听器接口的异常实现。

宰父嘉胜
2023-03-14

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

class Foo {
    static class Bar {
    }
}

Foo的名称。条形码是Foo$Bar。现在如果我们有:

class Foo {

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

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

将打印Foo$1

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

 类似资料:
  • 问题内容: 我正在编写一段代码,如果它是某个类的实例,则必须在其中强制转换。 和往常一样,我用于检查兼容性。 问题在于,由于对象属于“奇怪”类,因此永远无法满足检查要求。 例如; 当我在此对象上调用方法时,它将返回类+的名称(例如而不是)。 这是什么意思?有解决方案或解决方法吗? 问题答案: 那显示一个 内部类 (匿名(如果有数字)或命名)。例如: 班级的名称是。现在,如果我们有: 那将打印出来。

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

  • 问题内容: 我正在运行程序 我得到的输出是。 我不明白这条线 子女的父母的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(): 输出:

  • 问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”