Java: класс доступа внутри метода

#java #class

#java #класс

Вопрос:

Я хотел бы, чтобы один метод объявлял две строки и присваивал им значения. Затем используйте другой метод для чтения этих значений.

У меня есть такая структура:

 public class ABC extends CDE implements EFG {
    public void firstMethod(valueOne, valueTwo) {
        class TestClass {
            public String testValue = valueOne;
            public String anotherValue = valueTwo;
        }
    }

    public void readMethod() {
        // HERE I WANT TO READ testValue AND ASSIGN IT A NEW VALUE
    }
}
  

Как я могу это сделать?

И есть ли способ получше?

Комментарии:

1. Почему бы не объявить testValue и anotherValue как свойства ABC класса вместо объявления локального класса?

2. Какой в этом должен быть смысл?

3. Ваш код не компилируется; valueOne и valueTwo отсутствуют их типы. — Почему вы объявляете класс внутри метода? — Для передачи информации из одного метода в другой вы должны использовать параметры.

4. То, что вы делаете, это объявляете класс и никогда не создаете его экземпляр. Таким образом, значения никогда не устанавливаются и в любом случае не могут быть прочитаны. Что должен представлять внутренний класс?

5. @ernest_k Где-нибудь еще я вызову firstMethod для объявления двух строк, а позже вызову readMethod для чтения двух строк и изменения их значений.

Ответ №1:

Вы уверены, что вам нужен класс?

Может быть, простого объявления поля будет достаточно:

    public class ABC extends CDE implements EFG {
        public String testValue;
        public String anotherValue;


        public void firstMethod(String valueOne, String valueTwo) {
             // do whatever you wish with testValue and anotherValue
        }

        public void readMethod() {        
            // here you have access to both variables        
        }

    }
  

Ответ №2:

Сделайте локальный класс глобальным и устанавливайте / считывайте значения через экземпляр:

 public class ABC extends CDE implements EFG {

    class TestClass {
        public String testValue = valueOne;
        public String anotherValue = valueTwo;
    }
    private testClassInstance = new TestClass()

    public void firstMethod(valueOne, valueTwo) {
         testClassInstance.testValue = valueOne
         testClassInstance.anotherValue = valueTwo
    }

    public void readMethod() {
        System.out.println(testClassInstance.valueOne)
        System.out.println(testClassInstance.valueTwo)
    }
}
  

Ответ №3:

Все, что вы хотите сделать, это создать POJO, который содержит testValue и anotherValue , и объявить класс вне вашего класса компонента, например:

 class ExampleBean {
  private String testValue;
  private String anotherValue;

  //getters and setters
}
  

После завершения вы можете сохранить ссылку на этот класс в своем классе component и получить доступ к значению, например:

 public class ABC extends CDE implements EFG {
    ExampleBean exampleBean = new ExampleBEan();
    public void firstMethod(valueOne, valueTwo) {
        exampleBean.setValueOne(valueOne);
        exampleBean.setAnotherValue(valueTwo);
    }

    public void readMethod() {
        String value = exampleBean.getValueOne();
    }
}
  

Комментарии:

1. Почему? Почему бы просто не использовать поля?

2. Обновил ответ, реализовал его сразу после публикации.

Ответ №4:

Может быть, это будет соответствовать вашим критериям? То, что вы в данный момент запрашиваете, невозможно из-за области действия внутреннего класса.

Вы также можете инициализировать этот экземпляр частного класса в своем конструкторе.

 public class Sample {
    class TestClass {
        public String testValue;
        public String anotherValue;
    }

    private TestClass localTest = new TestClass();

    public void firstMethod(valueOne, valueTwo) {
        localTest.testValue = valueOne;
        localTest.anotherValue = valueTwo;
    }

    public void readMethod() {
        localTest.testValue = "test1";
        localTest.anotherValue = "anotherValue";

        System.out.println(localTest.testValue);
    }
}
  

Комментарии:

1. Инициализация?

2. Вы пробовали это? Вы собираетесь получить NullPointerException .

Ответ №5:

Вы объявляете класс внутри метода, что неправильно

Вам нужно понимать, что на самом деле означают класс и метод ( Google Java ООП) :

1- Вы должны создать класс и объявить нужные переменные

2. создайте конструкторы для значений по умолчанию

3- создайте установщики для установки (assign) этих значений

4- создайте средства получения для чтения этих значений