接口的一个用法---将接口作为方法的参数

    xiaoxiao2021-03-25  104

    程序功能:

    调整数组顺序,使奇数位于偶数位之前

    亮点:

    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

    转载请注明原文地址: https://ju.6miu.com/read-15029.html

    最新回复(0)