0
修改靜態變量爲了解釋我將使用的示例使用超類類型來過濾模板中刪除在超
//Superclass.java
public class Superclass
{
static String TypeInfo = "Superclass";
}
//Subclass.java
public class Subclass extends Superclass
{
static {
TypeInfo = "Subclass";
}
}
//Main.java
public class Main {
public static void main(String[] args)
{
System.out.print(GetTypeInfo(Subclass.class));
}
public static <T extends Superclass> String GetTypeInfo(Class<T> c)
{
return T.TypeInfo;
}
}
當class是模板化的,來自類加載器的所有信息似乎都丟失了,或者jvm取最初的超類的子類的價值,爲什麼劑量所有由子類靜態初始化的信息在模板化時變得隱藏?
在Java中沒有像「模板化」這樣的東西。無論Generic類型參數如何,'GetTypeInfo'將始終執行相同的操作,即在您的情況下讀取相同的'static'字段。由於代碼中只有一個字段,因此只能檢測是否執行了覆蓋該字段的「Subclass」的初始化程序。 [fabian解釋了爲什麼它沒有](http://stackoverflow.com/a/26074392/2711488) – Holger 2014-09-27 21:11:40