我在界面中有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)
}
我希望问题很清楚。由于我遇到了这个问题,我花了一整天的时间来寻找解决方案,但我找不到任何解决方案,而且我被卡住了。
答案 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);
}