在Java中,子类化是一种子类型化。
Java允许子类型化的方法有很多:
- 当时
class A extends B
,A
是B
因为B b = new A(...);
可以的子类型。 - 当时
interface A extends B
,A
是B
因为B b = new A() { ... }可以的子类型。 - 当时
class A extends B
,A[]
是B[]
因为B[] b = new A[0]
可以的子类型。 - 当时
class A implements B
,A
是B
因为B b = new A(...)
可以的子类型。
听起来您想要一种区分其他人的方法。下面应该这样做。
static boolean isSubclass(Class<?> a, Class<?> b) { return !b.isArray() && !b.isInterface() && b.isAssignableFrom(a);}但是由于类型擦除,它不会处理泛型类的子类型化。
Class实例在运行时不携带类型参数,因此无法区分a
newArrayList<String>()和的运行时类型
new ArrayList<Integer>()。



