Создание / ссылка на статический вложенный класс внутри статического вложенного класса - PullRequest
0 голосов
/ 21 мая 2011

Мне дали файл 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", но я не могу понять, как ссылаться на тип "Variables". Всякий раз, когда я добавляю:

import externalJarFile.Job.GlobalVars.Variable;

Я получаю сообщение об ошибке компиляции, что на тип "externalJarFile.Job.GlobalVars.Variable" нельзя ссылаться. Как я могу создать новый экземпляр «Variable» для добавления в список «GlobalVars.getVariable ()»?

Вот фрагмент кода, который я пробовал (но не работал):

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

[ Отредактировано для ясности ]

[ UPDATE ]

Хорошо, это немного странно. Если я возьму код из исходного проекта и напрямую импортирую его в мой, я смогу сослаться на внутренний внутренний класс. Тем не менее, когда я ссылаюсь на него, когда он упакован внутри файла JAR, он терпит неудачу. MTK ...

Ответы [ 4 ]

2 голосов
/ 21 мая 2011

Вы забыли пробел:

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

Это прекрасно работает для меня:

Job.GlobalVars.Variable var = new Job.GlobalVars.Variable();
var.setName("MByD");
0 голосов
/ 21 мая 2011

То, как вы сказали выше, правильно.Вы должны убедиться, что файл jar находится в вашем пути к классам, поскольку это определенно приведет к сбою импорта, а затем и всех будущих объявлений.

import mypackage.Job.GlobalVars.Variable;
...
Variable v = new Variable();
0 голосов
/ 21 мая 2011

Не нужно ничего импортировать.Вы должны иметь возможность просто ссылаться на свой внутренний класс по его имени, «Variable», из класса «Job»:

    private List<Variable> variables;

    public List<Variable> getVariable()
0 голосов
/ 21 мая 2011

Класс работы:

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();
    }
}
...