我對泛型非常瞭解。根據我的理解,當調用Generic類或方法時,必須提供Type參數。例如:類型轉換爲Generic
List<String> strings = new ArrayList<String>();
但是我在理解下面的代碼時遇到了一些困難。
public static <T extends Employee> T findById(@NonNull factory, int employeeId) {
return (T) factory.findEmployeeById(employeeId);
}
員工有很多子類型。例如:
public class Programmer extends Employee {}
public class Engineer extends Employee {}
通過使用這種方法findById
,我能成功地實施類似下面。
Programmer employee = EmployeeUtils.findById(factory, 2);
在findById
上述方法,怎麼會有人知道什麼是T
類型?只有暗示它是Employee
的子類型。它無法知道它是程序員還是工程師。 Java編譯器如何成功地在運行時將類型轉換爲具體的子類(Programmer
或Engineer
)?
如果您想推薦Java泛型,請指導我進一步閱讀。
「但是我在理解下面的代碼時遇到了一些困難」,這可能是因爲這個代碼是泛型的常見但濫用的使用:它不是類型安全的。 –