开发者

Why getClass returns the name of the class + $1 (or $*)

开发者 https://www.devze.com 2023-03-30 14:19 出处:网络
I\'m writing a piece of code in which I have to cast an Object if it is an instance of a certain class.

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 开发者_StackOverflow$* means? Is there a solution or a workaround?


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.


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.


$ 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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号