通过java中的方法中的参数调用2个方法

时间:2017-11-12 15:33:13

标签: java interface

我在界面中有2个方法:

public interface ISort
{
    public void insertionSort(final String[] a);
    public void selectionSort(final String[] a);
}

让我们调用方法,它接收方法作为参数 - 方法B

首先,我需要确定调用哪个接口方法并在方法B中调用相应的接口方法。复杂性在方法B的某些功能中,应由两种接口方法完成。这意味着我需要一些临时变量,它将封装所需的接口方法调用。所有的接口方法都有实现。

public void runTest(ISort sort)
{
        String[] list=stringsFromFile();
        sort=sort.selectionSort(list);
        if(sort.toString().equals("insertionSort")){
            sort=sort.insertionSort(list);
        }

        sort(list)
}

我希望问题很清楚。由于我遇到了这个问题,我花了一整天的时间来寻找解决方案,但我找不到任何解决方案,而且我被卡住了。

3 个答案:

答案 0 :(得分:2)

您的界面应该只有一个方法sort。插入排序和选择排序是同一“排序”抽象的两种实现,可以用不同的类表示。调用sort的方法不需要知道他们正在调用哪一个:

public void runTest(final ISorter sorter) {
    final String[] array = stringsFromFile();
    sorter.sort(array);
    // TODO validate that the array is now sorted
}

答案 1 :(得分:1)

不是在同一个接口中同时使用两个排序方法,而是使用Blank方法创建一个接口,并为其提供两种不同的实现,一种用于插入排序,另一种用于选择排序。

void sort(final String[] a)

调用runTest的方法应该选择ISort实现。

public interface ISort {
    void sort(final String[] a);
}

public class SelectionSort implements ISort {
    @Override
    public void sort(final String[] a) {
        // Your implementation
    }
}

public class InsertionSort implements ISort {
    @Override
    public void sort(final String[] a) {
        // Your implementation
    }
}

答案 2 :(得分:0)

在一天结束时,我找到了解决方案,结果非常简单。我对所有为这场噩梦的解决做出贡献的人表示感谢,特别是我要感谢 @izilotti @ruakh ,他们向我展示了正确的方向解决我的困境。

在调试过程中,我发现尽管有一些类变量,但几乎没有传递给runTest方法。

解决方案:我只需要将SelectionSort或InsertionSort的类实例传递给runTest()方法。

这是:

public void main(){
    SelectionSort sorter=new SelectionSort();
    runTest(sorter);

    InsertionSort sorter2=new InsertionSort();
    runTest(sorter2);
}