将方法内部生成的本体用于java中的另一个方法

时间:2016-02-27 10:09:20

标签: java methods ontology

首先,我在method1内生成了一个本体。它很成功。然后在第二种方法中,我需要将这个生成的本体用于另一个进程。我使用以下代码。它给出了一个错误:

  

线程中的异常" main"显示java.lang.NullPointerException。

问题出在哪里?我需要如何在method1method2中生成本体?

     public class OntologyCreation {

        public static void main (String args[]) {

        //main
        OntologyCreation ont = new OntologyCreation(); 
        OntModel m = null;
        String ontoClass = null;
        ont.method2(ontoClass, m);


        public  void method1(OntModel m) {     //for ontologyCreation
        m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
        -----
        -----
        }


        public ArrayList<String> method2(String ontoClass, OntModel m) {   // 2nd method for use generated ontology to another process
        method1(m);
        m.read("http://localhost/myont/ont.owl");      ????????
        ExtendedIterator<OntClass> classes = ((OntModel) m).listClasses(); 
        ----------
        ----------               
         }
        return xx; 
        }

4 个答案:

答案 0 :(得分:2)

如果您对OntModel实例多次使用OntologyCreation,则可以使用字段存储变量:

private OntModel m;

public void method1() {
    this.m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
}

public ArrayList<String> method2(String ontoClass) {
    method1();
    this.m.read("http://localhost/myont/ont.owl"); // use field value

替代方法是返回创建的OntModel,如其他答案中所述。

注意: Java总是按值传递,这就是method2方法中的值仍为null的原因,请参阅Is Java "pass-by-reference" or "pass-by-value"?

答案 1 :(得分:1)

您无法通过指定函数内部参数的名称来更改函数外部的变量。这样做的唯一方法是更改​​有问题的局部变量。因此,mmethod1的分配正确设置了局部变量m,但这不会影响m中的变量method2

解决方案是让method1返回对象,然后将其分配给局部变量:m = method1()

答案 2 :(得分:0)

m中返回method1

public OntModel method1(OntModel m) {     //for ontologyCreation
    m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
    /*-----*/
    return m;
}

method2中,调用应为:

m = method1(m);

Java按值传递引用,这意味着method1会收到对象m的地址。但是,m = something表示您在method1内更改了该地址值。在外面,它仍然是相同的,仍然指向null

答案 3 :(得分:0)

m被调用之前,您method2变量未被实例化。

因此它的值为null

即使您正在调用method1,该归因也只对该方法的范围有效。

您应该在OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);之前ont.method2(ontoClass, m); m才能在method2上使用Android CTS 5.1_r5 Non-interactive mode: Running initial command then exiting. Using commandline arguments as starting command: [run, cts, --plan, CTS, -s, JS2U300154120087, --disable-reboot] 02-27 17:49:09 I/DeviceManager: Detected new device JS2C300154455332 02-27 17:49:09 I/DeviceManager: Detected new device JS2U300154120087 02-27 17:49:09 I/TestInvocation: Starting invocation for 'cts' on build '5.1_r5' on device JS2U300154120087 02-27 17:49:09 I/JS2U300154120087: Created result dir 2016.02.27_17.49.09 02-27 17:49:10 I/CtsTest: ABIs: [armeabi-v7a, arm64-v8a]