【问题标题】:What's the difference between Name and CanonicalName? [duplicate]Name 和 CanonicalName 有什么区别? [复制]
【发布时间】:2013-03-31 23:38:55
【问题描述】:

Java 的Class.getName()Class.getCanonicalName() 有什么区别?

【问题讨论】:

标签: java class names canonical-name


【解决方案1】:

考虑以下程序:

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() 返回您尝试实例化类时将使用的内容。你不能用一个 (little-a) 匿名类来做到这一点,所以这就是 getCanonicalName() 返回 null 的原因。

【讨论】:

  • 不可能在几秒钟内找到您自己问题的答案。看起来像骗局。问题和答案的时间完全相同。
  • @MaciejZiarko 底部有一个复选框“回答你自己的问题,问答风格。我想将我最近的发现添加到 SO 的知识库中,因为我在任何地方都找不到。跨度>
  • 为了将来参考,不要在你试图探索/描绘的概念之后命名课程......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多