facebook廣告





123

2016年9月16日 星期五

instanceof-判斷物件繼承關係的小指令

JAVA有個判斷用繼承關係方法instanceof 如下
public isParent(Object object){
     if(object instanceof ArrayList){
          //object!你老爸是ArrayList啦!

     } else{
          //object!你老爸不是ArrayList,別亂認老爸!!!!

     }
}
以下是備份別人的
以下是抄來的
Java提供了instanceof作為判別類別間繼承關係之用,如果要判定的物件為該類別或該類別的子類別則傳回true,否則傳回false。需特別注意的是,物件與類別間要有繼承關係,否則會有compile error,如錯誤狀況1、2。
在Java裡有個特別規定,就是任何陣列都繼承Object,所以類別陣列將繼承Object和Object[],一般型別陣列則會繼承Object,但是一般型別不是物件,所以一般型別陣列不會繼承Object[]。
範例程式:
class myBase1 { }
class myBase2 extends myBase1 { }

public class myInstanceof extends myBase2 {
  public static void main(String[] args) {
    myBase1 b1 = new myBase1();
    myBase2 b2 = new myBase2();
    myInstanceof i1 = new myInstanceof();

    if (i1 instanceof myBase1) {
      System.out.println("i1是myBase1的後代");
    }
    else {
      System.out.println("i1不是myBase1的後代");
    }

    if (b1 instanceof myInstanceof) {
      System.out.println("b1是myInstanceof的後代");
    }
    else {
      System.out.println("b1不是myInstanceof的後代");
    }

    if (null instanceof myBase1) {
      System.out.println("null是myBase1的後代");
    }
    else {
      System.out.println("null不是myBase1的後代");
    }

    myBase2[] b2array = new myBase2[10];

    if (b2array instanceof Object) {
      System.out.println("b2array是Object的後代");
    }
    else {
      System.out.println("b2array不是Object的後代");
    }

    if (b2array instanceof Object[]) {
      System.out.println("b2array是Object[]的後代");
    }
    else {
      System.out.println("b2array不是Object[]的後代");
    }

    int[] i = new int[10];
    if (i instanceof Object) {
      System.out.println("i是Object的後代");
    }
    else {
      System.out.println("i不是Object的後代");
    }

    /*
    //錯誤狀況1
    if (i instanceof Object[]) {
      System.out.println("i是Object[]的後代");
    }
    else {
      System.out.println("i不是Object[]的後代");
    }

    //錯誤狀況2
    Long lng = new Long(10);
    if (lng instanceof String) {
      System.out.println("lng是String的後代");
    }
    else {
      System.out.println("lng不是String的後代");
    }
    */
  }
}
執行結果:
i1是myBase1的後代
b1不是myInstanceof的後代
null不是myBase1的後代
b2array是Object的後代
b2array是Object[]的後代
i是Object的後代
錯誤狀況1:
"myInstanceof.java": Error #: 365 : cannot compare int[] with java.lang.Object[]
錯誤狀況2:
"myInstanceof.java": Error #: 365 : cannot compare java.lang.Long with java.lang.String

沒有留言:

張貼留言