Java isAssignableFrom()
一、isAssignableFrom()
1、方法说明
java.lang.Class.isAssignableFrom(Class<?>)
public native boolean isAssignableFrom(Class<?> cls);
使用该方法可以判断此Class对象表示的类(或接口)是否与指定的Class表示的类(或接口)相同、或者是它们的超类(或超接口)。 如果此Class对象表示的是基本类型,那么该方法只有在当指定的参数Class正好是此Class对象的类型时返回true,否则返回false。
2、样例
public class Vehicle implements Serializable {
public int doors;
public Integer wheels;
}
public class Car extends Vehicle{
}
Vehicle vehicle = new Vehicle();
Car car = new Car();
System.out.println(vehicle.getClass().isAssignableFrom(Vehicle.class));//true
System.out.println(vehicle.getClass().isAssignableFrom(Car.class));//true
System.out.println(Object.class.isAssignableFrom(Vehicle.class));//true
System.out.println(car.getClass().isAssignableFrom(Vehicle.class));//false
try {
Field doors = vehicle.getClass().getField("doors");
System.out.println(doors.getType().isAssignableFrom(int.class));//true
System.out.println(doors.getType().isAssignableFrom(Integer.class));//false
Field wheels = vehicle.getClass().getField("wheels");
System.out.println(wheels.getType().isAssignableFrom(int.class));//false
System.out.println(wheels.getType().isAssignableFrom(Integer.class));//true
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
}
二、isInstance()
1、方法说明
java.lang.Class.isInstance(Object)
public native boolean isInstance(Object obj);
如果参数obj不是null而且可以强转为此Class对象表示的类,则返回true;否则返回false。 具体来说,如果参数obj是此Class对象所表示的类(或其任何子类)的实例,则返回true;否则返回false。如果此Class对象所表示的是接口,那么只要参数obj或其超类实现了此接口就会返回true,否则返回false。如果此Class所表示的对象是基本类型,则此方法返回false。
2、样例
Vehicle vehicle = new Vehicle();
Car car = new Car();
System.out.println(Vehicle.class.isInstance(vehicle));//true
System.out.println(Vehicle.class.isInstance(car));//true
System.out.println(Serializable.class.isInstance(car));//true
System.out.println(Object.class.isInstance(car));//true
int num = 10;
System.out.println(Integer.class.isInstance(num));//true
System.out.println(int.class.isInstance(num));//false
Object[] objs = new Object[]{new Object()};
Vehicle[] vehicles = new Vehicle[]{new Vehicle()};
Car[] cars = new Car[]{new Car()};
System.out.println(Object[].class.isInstance(vehicles));//true
System.out.println(Object[].class.isInstance(cars));//true
System.out.println(Vehicle[].class.isInstance(cars));//true
System.out.println(Vehicle[].class.isInstance(objs));//false
三、instanceof
Vehicle vehicle = new Vehicle();
Car car = new Car();
System.out.println(vehicle instanceof Vehicle);//true
System.out.println(car instanceof Vehicle);//true
System.out.println(car instanceof Serializable);//true
System.out.println(car instanceof Object);//true
Object[] objs = new Object[]{new Object()};
Vehicle[] vehicles = new Vehicle[]{new Vehicle()};
Car[] cars = new Car[]{new Car()};
System.out.println(vehicles instanceof Object[]);//true
System.out.println(cars instanceof Object[]);//true
System.out.println(cars instanceof Vehicle[]);//true
System.out.println(objs instanceof Vehicle[]);//false