java - Name和CanonicalName有什么区别? [重复]

这个问题已经有了答案:
What is the difference between canonical name, simple name and class name in Java Class?
7个答案
Java的Class.getName()Class.getCanonicalName()的区别是什么?

最佳答案

考虑以下程序:

package org.test.stackoverflow;

public class CanonicalName {

  public static void main(String[] args) {
    CanonicalName cn = new CanonicalName();
    cn.printClassNames();
  }

  private Anonymous anony;
  private MyAnony myAnony;

  public CanonicalName() {
    anony = new Anonymous() {
      public void printInterface() {
        System.out.println("Anony Name: " + getClass().getName());
        System.out.println("Anony CanonicalName: " + getClass().getCanonicalName());
      }
    };
    myAnony = new MyAnony();
  }

  public void printClassNames() {
    System.out.println("CanonicalName, Name: " + getClass().getName());
    System.out.println("CanonicalName, CanonicalName: " + getClass().getCanonicalName());
    anony.printInterface();
    myAnony.printInterface();
  }

  private static interface Anonymous {
    public void printInterface();
  }

  private static class MyAnony implements Anonymous {
    public void printInterface() {
      System.out.println("MyAnony Name: " + getClass().getName());
      System.out.println("MyAnony CanonicalName: " + getClass().getCanonicalName());
    }
  }
}

输出:
CanonicalName, Name: org.test.stackoverflow.CanonicalName
CanonicalName, CanonicalName: org.test.stackoverflow.CanonicalName
Anony Name: org.test.stackoverflow.CanonicalName$1
Anony CanonicalName: null
MyAnony Name: org.test.stackoverflow.CanonicalName$MyAnony
MyAnony CanonicalName: org.test.stackoverflow.CanonicalName.MyAnony

因此,对于基类,它们返回相同的东西。对于内部类,getName()使用$命名约定(即用于.class文件的内容),getCanonicalName()返回试图实例化类时将使用的内容。你不能用(小A)匿名类来实现这一点,因此getCanonicalName()返回空值。

本文翻译自 https://stackoverflow.com/questions/15903672/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java class names canonical-name


相关文章:

java - 检测谁创建了一个线程(w.Eclipse)

c++ - 字体渲染功能C ++ SDL中未处理的异常

c# - 如何在StructureMap中检索所有命名实例的名称

java - Struts 2:Actions之间的参数

java - JXDatePicker问题(第2部分)

c++ - 用另一个类成员C ++初始化一个类成员

c++ - 如何设计/创建日历类

c - 声明一个变量名称,其中包含C中另一个变量的内容

c++ - c ++中的名称和类型

java - Android-在应用程序级别的非活动类中保留活动参考