通用扩展和实现
我不明白为什么Company
编译。 我认为它检查extends
但不是implements
?
public interface Employee public class HourlyEmployee implements Employee public class Company Company company = new Company();
generics中的extends
关键字与一般extends
关键字的语义略有不同。
当在generics的上下文中使用extends
时,例如T extends Something
,这意味着T
应该是一个实现接口Something
的类型(在Something
是接口的情况下), 或者是Something
的子类(如果Something
是类)。
可能原因是如果在generics中支持implements
关键字,这会使类型参数声明过于冗长。
例如,你有:
相反,它的有效语法是:
实际上,您不需要拥有implements
关键字。 在定义类型T
的边界时,您只需指出类型T
派生自哪些类型 ,而不关心它们是接口还是类。
类型定义不是类定义。 您可以将类型定义视为连接少量数据集,其中结果集是您的类型T
符号T extends Employee
在类型参数的声明中指的是扩展类或实现接口。
public class Company
不是有效的语法。
因此, public class Company
表示您的Company
类的generics类型参数T
必须实现Employee
接口。