1. 程式人生 > >instanceof用法

instanceof用法

轉自:http://blog.csdn.net/leilu2008/article/details/6719660

instanceof是Java的一個二元操作符,和==,>,<是同一類東西。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的物件是否是它右邊的類的例項,返回boolean型別的資料。 


舉個例子: 
  String s = "I AM an Object!"; 
  boolean isObject = s instanceof Object; 
  我們聲明瞭一個String物件引用,指向一個String物件,然後用instanceof來測試它所指向的物件是否是Object類的一個例項,顯然,這是真的,所以返回true,也就是isObject的值為true。 

  instanceof有一些用處。比如我們寫了一個處理賬單的系統,其中有這樣三個類: 
  public class Bill {//省略細節} 
  public class PhoneBill extends Bill {//省略細節} 
  public class GasBill extends Bill {//省略細節} 
  在處理程式裡有一個方法,接受一個Bill型別的物件,計算金額。假設兩種賬單計算方法不同,而傳入的Bill物件可能是兩種中的任何一種,所以要用instanceof來判斷: 
  public double calculate(Bill bill) { 
  if (bill instanceof PhoneBill) { 

  //計算電話賬單 
  } 
  if (bill instanceof GasBill) { 
  //計算燃氣賬單 
  } 
  ... 
  } 
  這樣就可以用一個方法處理兩種子類。 
  然而,這種做法通常被認為是沒有好好利用面向物件中的多型性。其實上面的功能要求用方法過載完全可以實現,這是面向物件程式設計應有的做法,避免回到結構化程式設計模式。只要提供兩個名字和返回值都相同,接受引數型別不同的方法就可以了: 
  public double calculate(PhoneBill bill) { 
  //計算電話賬單 
  } 
  public double calculate(GasBill bill) { 

  //計算燃氣賬單 
  } 
  所以,使用instanceof在絕大多數情況下並不是推薦的做法,應當好好利用多型。 
  instanceof 一般情況下 用在物件型別的強制轉換 , 
  例如: 
  繼承關係 class Manager extends Employee 
  ---------------------------------------------------------- 
  public void doSomething(Employee e) { 
  if ( e instanceof Manger){ 
  Manager m = (Manager) e ; 
  } 
  } 
  網路釋義 
  1. 運算子 返回一個 Boolean 值,表明某個物件是否為特定類的一個例項。...instanceof 運算子...返回一個 Boolean 值,表明某個給定的數是否是有窮的。 
  2. 和回撥概念  instanceof和回撥概念...instanceof和回撥概念... 
  3. 動態的 
  4. 操作符  
  1. */  
  2.  publicstaticvoid finishactivity(final Activity activity,  
  3.      final Context context)  
  4.  {  
  5.      if (activity instanceof LoginActivity)  
  6.      {  
  7.          ((LoginActivity) activity).dialogShow();  
  8.      }  
  9.      else
  10.      {  
  11.          String strTitle = context.getResources().getString(R.string.exit);  
  12.          new AlertDialog.Builder(activity)  
  13.              .setTitle(strTitle)  
  14.              .setMessage(  
  15.                  activity.getResources().getString(R.string.confirmexit))  
  16.              .setPositiveButton(  
  17.                  activity.getResources().getString(R.string.confirm),  
  18.                  new DialogInterface.OnClickListener()  
  19.                  {  
  20.                      publicvoid onClick(DialogInterface dialog, int which)  
  21.                      {  
  22.                          //儲存下載任務
  23.                          DownLoadTaskManager.getInstance(context).saveTask();  
  24.                          //傳送logout.do請求伺服器端登出
  25.                          if (DataHandler.isOnline == true)  
  26.                          {  
  27.                              HttpThread thread = new HttpThread();  
  28.                              HttpTask task = new HttpTask(LogOutDataHandler  
  29.                                  .getUrl(), logOutListener,  
  30.                                  LogOutDataHandler.getRequestData());  
  31.                              thread.setTask(task);  
  32.                              thread.start();  
  33.                          }  
  34.                          // 退出程式
  35.                          activity.finish();  
  36.                      }  
  37.                  }).setNegativeButton(  
  38.                  activity.getResources().getString(R.string.cancel), null)  
  39.              .show();  
  40.      }  
  41.  }