如何将类作为函数参数传递

时间:2015-10-20 13:48:33

标签: java processing

我试图将一个类作为参数传递给方法,但不知道是否可能。

不是在Insertion class方法中调用void runTest(String[] text, int[] number, String url),而是可以将其作为参数传递,以便我可以添加其他排序算法。

这是我到目前为止所做的:

Insertion insertion;

void setup() {
  String url = sketchPath("numbers/512/");
  insertion = new Insertion();
  String[] stringData = null;
  int[] intData = null;
  runTest(stringData, intData, url);
}


void runTest(String[] text, int[] number, String url) {

  File directory = new File(url);
  File[] listOfFiles = directory.listFiles();
  for (File file : listOfFiles) {
    //println(file.getName());
    text = loadStrings(file);
    number = int(text);

    insertion.insertionSort(number);

  }
}



class Insertion {

  Insertion() {
  }

  int[] insertionSort(int[] input) {

    int temp;

    for (int i = 1; i < input.length; i++) {
      for (int j = i; j > 0; j--) {
        if (input[j] < input[j-1]) {
          temp = input[j];
          input[j] = input[j-1];
          input[j-1] = temp;
        }
      }
    }
    println(input);
    return input;
  }
}

3 个答案:

答案 0 :(得分:5)

您可能要做的是定义一个包含Sort函数的sort()接口:

interface Sort{
   public int[] sort(int[] input);
}

然后让您的Insertion班级实施您的Sort界面及其sort()功能:

class Insertion implements Sort{

  Insertion() {
  }

  int[] sort(int[] input) {
      //...
  }
}

对任何其他排序类执行相同操作,然后将Sort变量传递到runTest函数中:

void runTest(String[] text, int[] number, String url, Sort sortFunction) {

  File directory = new File(url);
  File[] listOfFiles = directory.listFiles();
  for (File file : listOfFiles) {
    //println(file.getName());
    text = loadStrings(file);
    number = int(text);

    sortFunction.sort(number);
  }
}

由于您的Insertion类(以及您创建的任何其他排序类)实现了Sort接口,因此您可以将它们的实例传递到runTest()函数。

Here是实现接口的Processing参考。

答案 1 :(得分:4)

创建名为interface的{​​{1}},然后使用它创建多个排序实现。像这样:

SortingAlgorithm

现在使用算法:

interface SortingAlgorithm {
   public int[] sort(int[]);
}

class BubbleSort implements SortingAlgorithm {
  int[] sort(int[] input) {
      // bubble sort code here
  }
}

class InsertionSort implements SortingAlgorithm {

  InsertionSort() {
  }

  int[] sort(int[] input) {
      return insertionSort(input);
  }

  int[] insertionSort(int[] input) {

    int temp;

    for (int i = 1; i < input.length; i++) {
      for (int j = i; j > 0; j--) {
        if (input[j] < input[j-1]) {
          temp = input[j];
          input[j] = input[j-1];
          input[j-1] = temp;
        }
      }
    }
    println(input);
    return input;
  }
}

答案 2 :(得分:4)

您可以使用接口。

public interface SortInterface{
void sortStuff(int[] input);
}

您可以拥有许多不同的排序类来实现此接口,例如

class Insertion implements SortInterface
class BubbleSort implements SortInterface

所有这些方法都实施了sortStuff(int[] input),您可以在

中调用
runTest(String[] text, int[] number, String url, SortInterface sortObject)
{
sortObject.sortStuff(number);
}