从另一个文件中以Java字符串形式调用方法

时间:2018-09-05 10:37:48

标签: java string import

我使用以下方法保存了文件ClassifierModule.java

public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {

    public int measureRatio(double[] means) {
        return (int) (means[3] / means[1]) ;
    }
}

我试图调用此方法在另一个.java文件中创建一个String,如下所示:

public static void main(String[] args) {
    int r = ClassifierModule.measureRatio(double[]);
}

我得到的唯一结果是一个错误:

error: '.class' expected:
int r = ClassifierModule.measureRatio(double[]);
                                              ^

我在做什么错了?

这是ClassifierModule.java的完整代码-> https://drive.google.com/file/d/1M6UlRkGEduBxQIsuOz93HEMGPtI8NiB9/view?usp=sharing

4 个答案:

答案 0 :(得分:1)

public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {

    public int measureRatio(double[] means){
        return (int) (means[3] / means[1]) ;
    }
}

measureRatio是一个实例方法,因此无法通过该类调用,但必须通过该类的实例调用。

public static void main(String[] args) {
int r = ClassifierModule.measureRatio(double[]);
}

double[]是您必须传递的类型,但这不是该方法可以使用的值。将其更改为:

public static void main(String[] args) {
  double[] param = new double[5];
  param[0] = 7; param[1] = 8; param[2] = 4;
  param[3] = 3; param[4] = 4;
  ClassifierModule module = new ClassifierModule();
  int r = module.measureRatio(param);
}

答案 1 :(得分:0)

您正在像在类级别调用方法那样调用该方法。 您必须创建类型为ClassifierModule的对象才能调用该方法,如下所示:

public static void main(String[] args) {
    // create an object
    ClassifierModule cm = new ClassifierModule();
    // define a parameter to be passed
    double[] values = {3.0, 4.0}; // this is just an example array!
    // and call the method with that parameter
    int r = cm.measureRatio(double[]);
}

作为替代方案,可以通过将ClassifierModule的方法设置为static来使其成为类方法:

public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {

    // this is now a method at class level
    public static int measureRatio(double[] means) {
        return (int) (means[3] / means[1]) ;
    }
}

public static void main(String[] args) {
    // define a parameter to be passed
    double[] values = {3.0, 4.0}; // this is just an example array!
    int r = ClassifierModule.measureRatio(values);
}

取决于您的要求,您应该选择什么选项。

答案 2 :(得分:0)

如前所述,可以简单地将方法static用作类的任何实例对象,因为它不依赖于任何状态。

public static int measureRatio(double[] means){
    return (int) (means[3] / means[1]) ;
}

但是,该类扩展并实现了东西,可能为评估提供了一些上下文。

public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {
    public ClassifierModule (ReactApplicationContext reactContext) {
        super(reactContext);
    }

    public int measureRatio(double[] means) {
        // Maybe use: getReactApplicationContext() 
        return (int) (means[3] / means[1]) ;
    }
}

然后需要做类似的事情:

int r = new ClassifierModule(...).measureRatio(double[]);

答案 3 :(得分:0)

您需要进行简单的修改

  1. 不能通过类名调用非静态方法。

    BufferListener {
    
         public static int measureRatio(double[] means) {
         return (int) (means[3] / means[1]) ;
    
    }
    

    }

  2. 您正在尝试在第二个代码中传递类型。不是双精度数组。

    public static void main(String[] args) {
      double[] array= new double[5];
      array[0] = 1; array[1] = 2; array[2] = 3;
      array[3] = 5; array[4] = 4;
      int r = ClassifierModule.measureRatio(array);//array is a double array
    }