在Java項目中,我定義泛型類掃描.class文件或JAR文件,以反映
public class Test<T>
和子類
public class SubClass extends Test<Person>
我的問題是如何掃描代碼,找出哪些類是從Test繼承而來的,類型爲T.我知道,類型T將在運行時被擦除。
,我們可以在.NET中(如下面的代碼)做的任何方法?
public static void RegisterVadas(Container container, params Assembly[] assemblies)
{
assemblies = assemblies.Distinct().ToArray();
foreach (var assembly in assemblies)
{
foreach (var vada in assembly.GetTypes()
.Where(t => t.IsOrHasGenericInterfaceTypeOf(typeof(IVada<>))))
{
RegisterVada(container, vada);
}
}
}
這是不可能的。類只有在被請求時才被加載,並不是每次都可用。字節碼不檢查泛型類型,所以T被解析爲Object,泛型變量始終爲Object類型,以獲取泛型變量的內容在它們的值上使用'.getClass()'。 –
@PeterRader他沒有詢問任何類型變量,而是關於具有該類型變量的具體類的特定子類,並且該信息被記錄在類文件中。 –