isAssignableFrom

instanceof 针对实例 
isAssignableFrom针对class对象

isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。   
通常调用格式是

Java代码  

  1. Class1.isAssignableFrom(Class2)

调用者和参数都是   Java.lang.Class   类型。   
      
  而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。   
    格式是:

Java代码  

  1. oo   instanceof   TypeName

第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

Java代码  

  1. public class Test {
  2. public static void main(String[] args) {
  3. List<String> list = new ArrayList<String>();
  4. System.out.println(list instanceof List);
  5. System.out.println(list instanceof ArrayList);
  6. /*      System.out.println(list.getClass());
  7. System.out.println(List.class);
  8. System.out.println(ArrayList.class);*/
  9. System.out.println(list.getClass().isAssignableFrom(List.class));
  10. System.out.println(List.class.isAssignableFrom(list.getClass()));
  11. }
  12. }

结果:

true
true
false
true

其中instanceof是子-->父 
isAssignableFrom是父-->子

我们应该尽量少用instanceof 运算符

应该尽量用多态来替代它

Java代码  

  1. public interface Accounts {
  2. }
  3. public class WaterAccounts implements Accounts {
  4. }
  5. public class ElectricityAccounts implements Accounts {
  6. }

Java代码  

    1. //客户端
    2. public class test {
    3. public static void main(String[] args) {
    4. Accounts accsWater = new WaterAccounts();
    5. Accounts accsElectricity = new ElectricityAccounts();
    6. acceptAcounts(accsWater);
    7. }
    8. // 第一种使用instanceof
    9. public static void acceptAcounts(Accounts accs) {
    10. if (accs instanceof WaterAccounts) {
    11. System.out.println("收水费");
    12. } else if (accs instanceof ElectricityAccounts) {
    13. System.out.println("收电费");
    14. }
    15. }
    16. // 第二种使用多态
    17. public static void acceptAcounts(WaterAccounts accs) {
    18. System.out.println("收水费");
    19. }
    20. public static void acceptAcounts(ElectricityAccounts accs) {
    21. System.out.println("收电费");
    22. }
    23. }
时间: 2024-08-09 11:53:09

isAssignableFrom的相关文章

instanceof 与isAssignableFrom

instanceof 针对实例 isAssignableFrom针对class对象 isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口.   通常调用格式是 Java代码   Class1.isAssignableFrom(Class2) 调用者和参数都是   Java.lang.Class   类型.           而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例.   

instanceof, isinstance,isAssignableFrom的区别

instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanceof 自身类  返回true 例: String s=new String("javaisland");       System.out.println(s instanceof String); //true Class类的isInstance(Object obj)方法,obj是被

Java中isAssignableFrom()方法与instanceof()方法用法

一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. isAssignableFrom()方法是判断是否为某个类的父类,instanceof()方法是判断是否某个类的子类. 1. Class.isAssignableFrom()方法 Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口.   格式为: Class1.isAssignable

C#控制台 判断一个类是否实现了指定的接口 IsAssignableFrom

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Reflection; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace ConsoleApplication14 10 { 11 public interface IPlus 12 {

Class的isAssignableFrom方法

Class类的isAssignableFrom是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下: public native boolean isAssignableFrom(Class<?> cls); 由方法签名可见是一个本地方法,即C代码编写的. 以下是JDK中的注释: Determines if the class or interface represented by this Class object is eit

isAssignableFrom ,isInstance , Instanceof() 区别

class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口.如果是则返回 true: 否则返回 false.如果该 Class表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true:否则返回 false ---------------------------------------------------- instanceof运算符 只被

类方法isAssignableFrom、instanceof和asSubclass的区别及实例

isAssignableFrom public boolean isAssignableFrom(Class if (List.class.isAssignableFrom(ArrayList.class)) { System.out.println("list is assignable from arraylist"); } if (ArrayList.class.isAssignableFrom(List.class)) { System.out.println("ar

Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别

Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别 博客分类: Java .netHTML 原地址:http://topic.csdn.net/t/20050127/15/3758173.html 我略作了下修改 Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口.   格式为:        Class1.isAssignableFrom(Class2)

【集腋成裘】类型判断(instanceof、isInstance、isAssignableFrom)

一.instanceof 用法:boolean 对象 instanceof 类型 解释:用于判断某一个对象是否是该类型的实例,除了8个基本数据类型,任何对象instanceof Object都为true,同理,子类对象instanceof 父类/接口也为true. 注意1:该方法为静态运算符,即在编译器就做类型检查,区别于class.isInstance(Object obj)的运行时. 举例: String strObj = "str object"; Integer intObj