当通过扩展或实现链接类时,建立子类型.亚型也用于泛型.
如何区分子类型和子类?
解决方法:
在Java中,子类化是一种子类型.
Java允许子类型化的方式有很多种:
>当A类延伸B时,A是B的子类型,因为B b = new A(…);没关系.
>当接口A扩展B时,A是B的子类型,因为B b = new A(){…}是可以的.
>当A类扩展B时,A []是B []的子类型,因为B [] b = new A [0]是正常的.
>当A类实现B时,A是B的子类型,因为B b = new A(…)是可以的.
听起来你想要一种方法来区分其他人.以下应该这样做.
static boolean isSubclass(Class<?> a, Class<?> b) {
return !b.isArray() && !b.isInterface() && b.isAssignableFrom(a);
}
但是由于类型擦除,它不会处理泛型类的子类型.类实例在运行时不携带类型参数,因此无法区分新ArrayList< String>()的运行时类型与新的ArrayList< Integer>().