我使用以下方法保存了文件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
答案 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)
您需要进行简单的修改
不能通过类名调用非静态方法。
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
}