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

在Java中以字符串形式从另一个文件调用方法,java,string,import,Java,String,Import,我使用以下方法创建了文件ClassifierModule.java: public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener { public int measureRatio(double[] means) { return (int) (means[3] / means[1]) ; } } 我试图调用此方法在另一个.java文件中创

我使用以下方法创建了文件
ClassifierModule.java

public class ClassifierModule extends ReactContextBaseJavaModule implements BufferListener {

    public int measureRatio(double[] means) {
        return (int) (means[3] / means[1]) ;
    }
}
我试图调用此方法在另一个.java文件中创建一个
字符串,如下所示:

public static void main(String[] args) {
    int r = ClassifierModule.measureRatio(double[]);
}
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[]);
}
我得到的唯一结果是一个错误:

error: '.class' expected:
int r = ClassifierModule.measureRatio(double[]);
                                              ^
我做错了什么


下面是ClassifierModule.java的fuul代码->

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

public static void main(String[] args) {
    int r = ClassifierModule.measureRatio(double[]);
}
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
来将其设置为class方法:

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);
}
这取决于你的要求,你应该选择什么选项

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[]);
}
public static int measureRatio(double[] means){
    return (int) (means[3] / means[1]) ;
}
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);
}
int r = new ClassifierModule(...).measureRatio(double[]);

如前所述,可以简单地将方法
设置为静态的
,因为它不依赖于类的任何状态和实例对象

public static void main(String[] args) {
int r = ClassifierModule.measureRatio(double[]);
}
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]) ;
    }
}
然后需要做一些类似的事情:

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);
}
int r = new ClassifierModule(...).measureRatio(double[]);

你需要做一些简单的修改

  • 不能按类名调用非静态方法

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

  • 您正试图在第二个代码中传递类型。不是双重数组

    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
    }
    

  • 例如,您尝试在静态上下文中调用实例方法。另外,作为参数,您需要传递一个带有值的变量,而不是类型。在
    int r=ClassifierModule.measureRatio(double[])上,您想做什么?您声称“在另一个.java文件中创建字符串”,但我在这里没有看到任何字符串。使用选项来澄清您的问题。请描述您对代码的期望。Pshemo,我想将“public int measureRatio(double[]的意思)”保存到另一个文件中的字符串中,但我不知道如何调用它。我真诚地建议您花一些时间阅读。。。自上而下。你似乎在这里发明了自己的语法。您的代码在各个级别上都没有意义。不幸的是,所有这些都不起作用。它以同样的错误结束:(那么,请编辑您的问题并发布类的代码
    ClassifierModule
    。可能有助于查看实现。将lnk粘贴到整个文件;)我在回答中编辑了代码,使其完全可编译。您没有作为参数的值,只有一个类型(
    double[]
    )。该值必须定义为有效。我不理解此部分-参数[0]=7;参数[1]=8;参数[2]=4;参数[3]=3;参数[4]=4;如果不这样做,double数组(param)将填充double的默认值,即0。我刚刚补充说,为了避免以后在代码中的means[3]/means[1]上出现divisionBy0错误,我添加的部分将被转换为:3/8它不会更改means[3]和means[1]下的值吗?它们都包含来自外部传感器的数据。在您当前的代码中,没有值,我只是添加了这个值(仅此示例,不复制到您的代码中),以避免它们都是零(作为默认值)。编辑:对于您当前的代码,我指的是您在此处作为示例发布的代码,而不是(可能)您稍后添加链接以结束错误的更大代码块:“错误:找不到符号int r=ClassifierModule.measureRatio(array);^”嘿,你需要先创建一个数组。我只是提出了一个想法。让我来编辑