instanceof用法
阿新 • • 發佈:2019-01-26
轉自:http://blog.csdn.net/leilu2008/article/details/6719660
舉個例子:
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. 操作符
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. 操作符
- */
- publicstaticvoid finishactivity(final Activity activity,
- final Context context)
- {
- if (activity instanceof LoginActivity)
- {
- ((LoginActivity) activity).dialogShow();
- }
- else
- {
- String strTitle = context.getResources().getString(R.string.exit);
- new AlertDialog.Builder(activity)
- .setTitle(strTitle)
- .setMessage(
- activity.getResources().getString(R.string.confirmexit))
- .setPositiveButton(
- activity.getResources().getString(R.string.confirm),
- new DialogInterface.OnClickListener()
- {
- publicvoid onClick(DialogInterface dialog, int which)
- {
- //儲存下載任務
- DownLoadTaskManager.getInstance(context).saveTask();
- //傳送logout.do請求伺服器端登出
- if (DataHandler.isOnline == true)
- {
- HttpThread thread = new HttpThread();
- HttpTask task = new HttpTask(LogOutDataHandler
- .getUrl(), logOutListener,
- LogOutDataHandler.getRequestData());
- thread.setTask(task);
- thread.start();
- }
- // 退出程式
- activity.finish();
- }
- }).setNegativeButton(
- activity.getResources().getString(R.string.cancel), null)
- .show();
- }
- }