1. 程式人生 > >介面的一個用法---將介面作為方法的引數

介面的一個用法---將介面作為方法的引數

程式功能:

調整陣列順序,使奇數位於偶數位之前

亮點:

C++中可以直接把方法指標作為另一個方法的引數傳入,java中則不可以,要想實現類似的功能,考慮用介面

下面這段程式碼實現了可擴充套件的功能(可以把陣列前後劃分條件改為其他,如正負等,只需要修改介面中的fun()方法),而不用動reOrderArray,如下:

public class Solution {
    public void reOrderArray(int[] array) {
        UserJudge uj = new UserJudge();
        reOrderArray(array, uj);
    }

    public void reOrderArray(int[] array, Judge judge) {
        if (array.length == 0)
            return;
        int left = 0;
        int right = array.length - 1;
        while (left < right) {
            while (left < right && judge.fun(array[left])) {
                left++;
            }
            while (left < right && !judge.fun(array[right])) {
                right--;
            }
            if (left < right) {
                int temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }
    }
}

//Judge介面提供陣列劃分的方法
interface Judge {
    public boolean fun(int a);
}

//使用者實現介面,並根據實際情況修改fun函式的不同劃分方法(如奇偶、正負等)
class UserJudge implements Judge {
    public boolean fun(int a) {
        return (a & 0x1) == 1; //是奇數
    }
}

當然,這會改變奇偶數的相對位置,但是這短程式碼可以很好的說明把介面傳入方法reOrderArray中,以此讓使用者根據自己的需要實現介面中的方法並在方法reOrderArray中呼叫的思想,也就是說只用實現介面中的方法,而不用修改reOrderArray

相關推薦

介面一個用法---介面作為方法引數

程式功能: 調整陣列順序,使奇數位於偶數位之前 亮點: C++中可以直接把方法指標作為另一個方法的引數傳入,java中則不可以,要想實現類似的功能,考慮用介面 下面這段程式碼實現了可擴充套件的功能(

Java基礎【Eclipse的使用】jar包的匯入匯出 文件註釋匯出幫助文件 類、抽象類、介面作為方法引數 不同修飾符混合使用細節

第14天面向物件 今日內容介紹  Eclipse常用快捷鍵操作  Eclipse文件註釋匯出幫助文件  Eclipse專案的jar包匯出與使用jar包  不同修飾符混合使用細節  辨析何時定義變數為成員變數  類、抽象類、介面作為方法引數  類、抽象類、介面作為

【C/C++】sprintf中如何容器作為可變引數列表傳入

近日做指令碼介面時遇到一個變參的傳入介面,因為我們遊戲中的腳本系統是自定義的,這個介面的引數因為是可變,所以將引數讀進來存入一個Vector容器中,然後利用Sprintf格式化之後傳送給客戶端做邏輯,以前的做法就是switch…case…這個容器中元素的個數,然後sprintf( szBuff, nBuffS

引用作為函式引數

引用經常被用作函式引數,使得函式中的變數名成為呼叫程式中的變數別名。這種傳遞引數的方法稱為按引用傳遞。按引用傳遞允許被呼叫的函式能夠訪問呼叫函式中的變數。C++新增這項特性是對C語言的超越,C語言只能

Java程式匿名物件作為方法引數方法時的執行順序

先說結果:執行順序是由裡到外。先執行匿名類的構造方法,在執行外面以匿名物件作為引數的方法。 在看公司大神寫的程式碼時,因為用到了很多匿名物件,匿名物件的構造方法裡面又嵌套了很多方法和匿名物件,看的時候很頭疼,不知道具體的執行流程,所以寫的個小Demo來做試驗。 程式碼如下:

JavaScript中UUID作為方法引數中轉譯方法

JavaScript中,同一個方法的引數傳遞,如果是數字則能夠正常傳遞,alert能正常彈出值;但是一旦傳入的是一個UUID(String型別)則引數傳遞失敗!直接報錯,控制檯打印出無法引用的錯誤。alert也當然不能執行。 程式碼如下(直接通過JavaScript對顯示頁

String和StringBuffer作為方法引數引起的值傳遞和方法傳遞

一、 最開始的示例寫程式碼最重要的就是實踐,不經過反覆試驗而得出的說辭只能說是憑空遐想罷了。所以,在本文中首先以一個簡單示例來丟擲核心話題:public class StringAsParamOfMethodDemo {public static void main(Str

C語言中如何陣列作為函式引數傳遞

今天覆習到c語言的陣列,看到這麼一個問題: 現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。 程式要處理的冪最大為100。 輸入格式: 總共要輸入兩個多項式,每個多項式的輸入格式如下: 每行輸入兩個數字,第一個表

Jmeter關聯之如何介面的返回值作為下個介面引數

介面測試很多時候用到B介面的引數是A介面的返回值,這個時候就需要用到關聯。儲存A介面的返回值,B介面的引數直接關聯就OK了,如何儲存B介面的返回值,我一般用到的是正則表示式,一個是提取方便,二是公式簡單便於理解;但是jmeter的正則表示式需要外掛才能使用。 1.Jmeter目錄結構介紹

抽象類、介面作為方法返回值和引數

1、抽象類作為方法的引數 抽象類作為方法引數傳遞時,需要傳入一個實現抽象類所有抽象方法的子類物件。 2、抽象類作為方法的返回值 抽象類作為方法的返回值時,需要返回一個實現了抽象類所有抽象方法的子類物件。 3、介面作為方法引數 介面作為方法引數時,傳入的是一個介面的實現類的物件。 4、介

一個類實現一個介面,可以重寫介面方法引數型別嗎?

答:不可以。 介面中定義的都是抽象方法,沒有實現,所以當有介面被繼承後,必須實現介面類中的所有構造方法,這個過程就是重寫介面方法,之後可以重新填寫方法內容,但是方法的名,引數型別和個數、引數返回值型別

JmeterJDBC Request查詢結果作為一個接口參數方法

多條 在一起 循環控制 nbsp 根據 如果 sso log 設置 現在有一個需求,從數據庫tieba_info表查出rank小於某個值的username和count(*),然後把所有查出來的username和count(*)作為參數值,用於下一個接口。 tieba_inf

###好好好####Tensorflow模型匯出為一個檔案及介面設定

    在用PMML實現機器學習模型的跨平臺上線中,我們討論了使用PMML檔案來實現跨平臺模型上線的方法,這個方法當然也適用於tensorflow生成的模型,但是由於tensorflow模型往往較大,使用無法優化的PMML檔案大多數時候很笨拙,因此本文我們專門討論下tensorflow機器學習模型的

Kotlin函式作為引數傳遞,使用雙冒號::引用其他方法

Kotlin 中 雙冒號操作符 表示把一個方法當做一個引數,傳遞到另一個方法中進行使用,通俗的來講就是引用一個方法。先來看一下例子: fun main(args: Array<String>) { println(lock("param1", "param2", ::get

[UE4]更通用的介面UserWidget作為圖示新增到小地圖

 將圖示改成UserWidget新增到小地圖,UserWidget支援動畫特效,更豐富小地圖的功能。   一、在小地圖圖示結構體中,將Flag資料型別改成UserWidget,刪除ImageWidget(型別是Image,因為不需要了)   二、注意:動態新增UserWi

使用layui 做後臺管理介面,在Tab中的連結點選後新增一個新TAB的解決方法

給連結或按鈕  新增 onclick="self.parent.addTab('百度','http://www.baidu.com','icon-add')"   如: <a href="javascript:void(0)" title="google" onclick="s

物件作為引數傳遞給方法

要求: (1)定義一個Circle類,包含一個double型的radius屬性代表圓的半徑,一個findArea()方法返回圓的面積。 (2)定義一個類PassObject,在類中定義一個方法printAreas(),該方法的定義如下: public void printAreas(Cirl

簡單實現介面返回的資料寫入文字,從文字讀取引數,實現介面引數自動化

import requestsimport jsonimport datetimeimport re# 需要測試的環境api_host = "192.168.10.XX:XXXX"#發貨寶登入 15023621999headers_null = { 'Content-Type' : 'applicati

編碼實現一個文字檔案(圖片)從一個地方複製到另一個地方(源路徑到目的路徑可以通過方法引數傳入)

public class MyTest { public static void main(String[] args) { try { test(); } catch (Exception e) { e.printStackTrace(); } } publi

介面統一引數格式封裝方法引數傳遞工具類

1...ResultInfo實體承載類 package com.test.domi.common.system; public class ResultInfo<T> { private String code; private String message;