What is the difference between canonical name, simple name and class name in Java Class?

后端 未结 8 1218
感动是毒
感动是毒 2020-11-27 08:58

In Java, what is the difference between these:

Object o1 = ....
o1.getClass().getSimpleName();
o1.getClass().getName();
o1.getClass().getCanonicalName();
         


        
8条回答
  •  我在风中等你
    2020-11-27 09:16

    It is interesting to note that getCanonicalName() and getSimpleName() can raise InternalError when the class name is malformed. This happens for some non-Java JVM languages, e.g., Scala.

    Consider the following (Scala 2.11 on Java 8):

    scala> case class C()
    defined class C
    
    scala> val c = C()
    c: C = C()
    
    scala> c.getClass.getSimpleName
    java.lang.InternalError: Malformed class name
      at java.lang.Class.getSimpleName(Class.java:1330)
      ... 32 elided
    
    scala> c.getClass.getCanonicalName
    java.lang.InternalError: Malformed class name
      at java.lang.Class.getSimpleName(Class.java:1330)
      at java.lang.Class.getCanonicalName(Class.java:1399)
      ... 32 elided
    
    scala> c.getClass.getName
    res2: String = C
    

    This can be a problem for mixed language environments or environments that dynamically load bytecode, e.g., app servers and other platform software.

提交回复
热议问题