Class的getInterfaces與getGenericInterface差別
一、getSuperclass 傳回直接繼承的父類(由于編譯擦除,沒有顯示泛型參數)
| 傳回表示此 所表示的實體(類、接口、基本類型或 void)的超類的 。 |
傳回表示此
Class
Class
如果此
Class
表示
Object
類、一個接口、一個基本類型或 void,則傳回 null。
如果此對象表示一個數組類,則傳回表示該
Object
類的
Class
對象。
傳回:
此對象所表示的類的超類。
二、getGenericSuperclass 傳回直接繼承的父類(包含泛型參數)
| 傳回表示此 Class 所表示的實體(類、接口、基本類型或 void)的直接超類的 Type。 |
傳回表示此 Class 所表示的實體(類、接口、基本類型或 void)的直接超類的 Type。
如果超類是參數化類型,則傳回的 Type 對象必須準确反映源代碼中所使用的實際類型參數。如果以前未曾建立表示超類的參數化類型,則建立這個類型。有關參數化類型建立過程的語義,請參閱
ParameterizedType
聲明。
如果此 Class 表示 Object 類、接口、基本類型或 void,則傳回 null。
如果此對象表示一個數組類,則傳回表示 Object 類的 Class 對象。
此對象所表示的類的超類
抛出:
GenericSignatureFormatError
- 如果正常類簽名不符合 Java Virtual Machine Specification, 3rd edition 規定的格式
TypeNotPresentException
- 如果正常超類引用不存在的類型聲明
MalformedParameterizedTypeException
- 如果正常超類引用的參數化類型由于某種原因無法執行個體化
代碼執行個體:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5SN5ADN2QDZ3EWMxgjZyYDZ5MTMiFWZmdDMiBDO4MGN08CX2AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.gif)
package cn.test;
public class Test {
public static void main(String[] args) {
System.out.println("Student.class.getSuperclass()\t"
+ Student.class.getSuperclass());
System.out.println("Student.class.getGenericSuperclass()\t"
+ Student.class.getGenericSuperclass());
System.out.println("Test.class.getSuperclass()\t"
+ Test.class.getSuperclass());
System.out.println("Test.class.getGenericSuperclass()\t"
+ Test.class.getGenericSuperclass());
System.out.println("Object.class.getGenericSuperclass()\t"
+ Object.class.getGenericSuperclass());
System.out.println("Object.class.getSuperclass()\t"
+ Object.class.getSuperclass());
System.out.println("void.class.getSuperclass()\t"
+ void.class.getSuperclass());
System.out.println("void.class.getGenericSuperclass()\t"
+ void.class.getGenericSuperclass());
System.out.println("int[].class.getSuperclass()\t"
+ int[].class.getSuperclass());
System.out.println("int[].class.getGenericSuperclass()\t"
+ int[].class.getGenericSuperclass());
}
}
class Person<T> {
}
class Student extends Person<Test> {
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5SN5ADN2QDZ3EWMxgjZyYDZ5MTMiFWZmdDMiBDO4MGN08CX2AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.gif)
Student.class.getSuperclass() class cn.test.Person
Student.class.getGenericSuperclass() cn.test.Person<cn.test.Test>
Test.class.getSuperclass() class java.lang.Object
Test.class.getGenericSuperclass() class java.lang.Object
Object.class.getGenericSuperclass() null
Object.class.getSuperclass() null
void.class.getSuperclass() null
void.class.getGenericSuperclass() null
int[].class.getSuperclass() class java.lang.Object
int[].class.getGenericSuperclass() class java.lang.Object