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

发布于 2024-12-01 15:22:59 字数 323 浏览 1 评论 0原文

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

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

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

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

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

I'm writing a piece of code in which I have to cast an Object if it is an instance of a certain class.

As usual I'm using instanceof for checking the compatibility.

The problem is that the check is never satisfied because the objects belong to "strange" classes.

For example; when I call the method getClass().getSimpleName() on this object it return me the name of the class + $* (e.g. ViewPart$1 instead of ViewPart).

What does this $* means?
Is there a solution or a workaround?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无法回应 2024-12-08 15:22:59

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

class Foo {
    static class Bar {
    }
}

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

class Foo {

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

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

这将打印 Foo$1

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

That shows an inner class (either anonymous (if it has a number) or named). For example:

class Foo {
    static class Bar {
    }
}

The name of class Foo.Bar is Foo$Bar. Now if we had:

class Foo {

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

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

That will print Foo$1.

You can see the same effect in the naming of the class files created by javac.

这些是匿名类的实例。 ViewPart$1 是在 ViewPart 内定义的第一个匿名类 - 但这并不意味着它是 ViewPart 的子类。它很可能是某些 Listener 接口的匿名实现。

These are instances of an anonymous class. ViewPart$1 is the first anonymous class defined inside ViewPart - but that doesn't mean it's a subclass of ViewPart. It's most likely an anoymous implementation of some Listener interface.

殤城〤 2024-12-08 15:22:59

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

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

如果编译此代码,您将获得两个类文件 TopClass.class 和 TopClass$SubClass.class。

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

$ denotes for inner class. For example consider two classes

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

If you compile this code you will get two class files TopClass.class and TopClass$SubClass.class.

Check your ViewPart class whether it has any inner classes.
Hope it helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文