从另一个类中的一个类调用方法

时间:2019-01-10 17:29:29

标签: java rjava

我试图使用第二个类中的方法(应该返回一个列表)从一个类中调用该方法,但是,第二个类的方法未被识别。我没有收到任何可见的错误或警告。

我的第一堂课

import java.util.*;

public class testClass {

        public static List<Object> makeStuff() {

            int a = 2;
            double b = 3.1;             
            return Arrays.asList(a, b);         
        }
    }

第二个

import java.util.*;

public class otherClass {

    public List<Object> outputStuff() {

        // create some other stuff here which will be appended to id
        List<Object> id = testClass.makeStuff();
        return id ;
    }

    public void main(String[] args) {

    }
}

How to access a method from a class from another class?起,我认为这可以工作,因为第一种方法是静态的。我在哪里犯错?



如有必要,请提供其他信息:实际上我正在使用rJava将代码与R交互,但是收到一条错误消息,表明java是错误的。

这将返回第一类/方法的预期值

library(rJava)
.jinit()
.jaddClassPath("C:\\Users\\david\\eclipse-workspace\\SOtest\\bin")    
myJavaClass <- .jnew("testClass")
x <- J(myJavaClass, "makeStuff")
x
# [1] "Java-Object{[2, 3.1]}"

但不是第二个

.jinit()
.jaddClassPath("C:\\Users\\david\\eclipse-workspace\\SOtest\\bin")    
myJavaClass <- .jnew("otherClass")
x <- J(myJavaClass, "outputStuff")

引发错误

  

.jcall(“ RJavaTools”,“ Ljava / lang / Object;”,“ invokeMethod”,cl,中的错误:     java.lang.NoSuchMethodException:otherClass.outputStuff()

3 个答案:

答案 0 :(得分:1)

代码没有问题。主要方法应该是

public static void main(String a[]){ new otherClass().otherstuff();}

那应该足够了。我们可以通过类名从非静态方法中调用静态方法。

因此要从main调用otherstuff,要么将otherstuff设为静态,要么创建otherClass的新实例并直接调用。

答案 1 :(得分:0)

您可以将outputStuff设置为静态,这样就可以正常工作,因为这是您尝试开发的方法

答案 2 :(得分:-1)

Main方法应该是公共静态void main(String [] args)。 从非静态方法中调用静态方法是完全可以的。