Java 如果某个class.class是从另一个class.class派生的,是否在编译时签入?

Java 如果某个class.class是从另一个class.class派生的,是否在编译时签入?,java,runtime,compile-time,typechecking,Java,Runtime,Compile Time,Typechecking,这似乎是一个新手问题,在Java中,如何在编译时检查someClass.class是否派生自另一个class.class,或者如果在编译时无法检查,如何在运行时检查?在代码中: anotherClass.class.isAssignableFrom( someClass.class ); 如果还希望检查另一个类是否为真实类(而不是接口),请添加对以下对象的调用: 例如: System.out.println( Number.class.isAssignableFrom( Integer.cla

这似乎是一个新手问题,在Java中,如何在编译时检查someClass.class是否派生自另一个class.class,或者如果在编译时无法检查,如何在运行时检查?

在代码中:

anotherClass.class.isAssignableFrom( someClass.class );
如果还希望检查另一个类是否为真实类(而不是接口),请添加对以下对象的调用:

例如:

System.out.println( Number.class.isAssignableFrom( Integer.class )); // true
请注意,
instanceof
不适用于您,因为您没有实例,只有类

摘自Javadoc的以下内容:

确定此类对象表示的类或接口是否与指定的类参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回true;否则返回false。如果该类对象表示基元类型,则如果指定的类参数正是该类对象,则该方法返回true;否则返回false


如果只有类,则可以在运行时使用
Class.isAssignableFrom()
进行检查;如果有实例,则可以使用
instanceof
操作符进行检查


至于编译时间,我不理解这个问题。为什么编写代码的人在编译时之前不知道呢?

正如其他人已经建议的那样,在运行时进行检查非常简单。然而,在编译时用一点技巧就可以做到这一点

您可以使用泛型获得如下方法:

public static <A, B extends A> void isExtends(Class<A> clazzA, Class<B> clazzB) {
    // empty
}
编译器将帮助您验证某个类是否从另一个类扩展


(但老实说,我想知道这在现实生活中是否真的有用:p)

-1
instanceof
不起作用,因为OP没有实例,只有classes@Bohemian是的,但为了完整性,我认为应该提到这一点。我已经改写了一点。
public static <A, B extends A> void isExtends(Class<A> clazzA, Class<B> clazzB) {
    // empty
}
isExtends(AnotherClass.class, SomeClass.class);