在静态嵌套类中实例化/引用静态嵌套类

时间:2011-05-21 14:28:06

标签: java inner-classes

我一直在使用一个jar文件,它在另一个静态内部类中有一个静态内部类:

package externalJarFile;

public class Job
{
  public static class GlobalVars
  {
    private List<Job.GlobalVars.Variable> variables;
    public List<Job.GlobalVars.Variable> getVariable()
    {
        if (this.variables == null) {
            this.variables = new ArrayList<Job.GlobalVars.Variable>();
        }
        return this.variables;
    }

    public static class Variable
    {
      String name;
      String value;
      public String getName() { return name; }
      public void setName( String name ) { this.name = name; }
      public String getValue() { return value; }
      public void setValue( String value) { this.value= value; }
    }
  }  
}

我遇到的问题是我需要填充“Job.GlobalVars”列表,但我无法弄清楚如何引用“变量”类型。每当我添加:

import externalJarFile.Job.GlobalVars.Variable;

我收到编译错误,无法引用“externalJarFile.Job.GlobalVars.Variable”类型。如何创建新的“变量”实例以添加到“GlobalVars.getVariable()”列表中?

这是我尝试过的一个片段(但没有用):

Job.GlobalVars vars = new Job.GlobalVars();
Job.GlobalVars.Variable v = new Job.GlobalVars.Variable();

[为了清晰而编辑]

[更新

好的,这有点奇怪。如果我从原始项目中获取代码并直接将其导入到我的代码中,我就可以引用内部内部类。但是,当我在jar文件中打包时引用它时,它会失败。 MTK ...

4 个答案:

答案 0 :(得分:2)

你忘记了一个空间:

Job.GlobalVars vars = new Job.GlobalVars();
               ^

这对我来说很好用:

Job.GlobalVars.Variable var = new Job.GlobalVars.Variable();
var.setName("MByD");

答案 1 :(得分:0)

班级工作:

package mypackage;

import java.util.ArrayList;
import java.util.List;

public class Job {
      public static class GlobalVars
      {
        private List<Variable> variables;
        public List<Variable> getVariable()
        {
            if (this.variables == null) {
                this.variables = new ArrayList<Variable>();
            }
            return this.variables;
        }

        public static class Variable
        {
          String name;
          String value;
          public String getName() { return name; }
          public void setName( String name ) { this.name = name; }
          public String getValue() { return value; }
          public void setValue( String value) { this.value= value; }
        }
      }  
}

使用GlobalVars和Variable的其他类。进口效果非常好。

package mypackage;

import mypackage.Job.GlobalVars;
import mypackage.Job.GlobalVars.Variable;

public class RunIt {
    public static void main(String[] args) {
        GlobalVars vars = new GlobalVars();
        Variable v = new Variable();
    }
}

答案 2 :(得分:0)

无需导入任何内容。您应该能够通过“Job”类中的名称“Variable”来引用您的内部类:

    private List<Variable> variables;

    public List<Variable> getVariable()

答案 3 :(得分:0)

你上面说的方式是正确的。您应该检查以确保jar文件位于类路径中,因为这肯定会导致导入失败以及随后的所有声明。

import mypackage.Job.GlobalVars.Variable;
...
Variable v = new Variable();