上代码:

public class Main {

    public static void main(String[] args) {

        new Thread(new Runnable() {

            @Override            public void run() {

                System.out.println(this.getClass().getName());

                System.out.println(this.getClass().getCanonicalName());

            }

        }).start();

    }

}

运行结果:

Main$1

null

按照字面理解不应该返回null啊?!

再仔细看Javadoc:

/** * Returns the canonical name of the underlying class as * defined by the Java Language Specification.  Returns null if * the underlying class does not have a canonical name (i.e., if * it is a local or anonymous class or an array whose component * type does not have a canonical name). * @return the canonical name of the underlying class if it exists, and * {@code null} otherwise. * @since 1.5

 */

原来, 内部类会返会null!

转载请注明:WebLogic Android 博客 » 一个Java获取唯一类名中的坑…