我对泛型非常了解。根据我的理解,当调用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泛型,请指导我进一步阅读。
“但是我在理解下面的代码时遇到了一些困难”,这可能是因为这个代码是泛型的常见但滥用的使用:它不是类型安全的。 –