#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- создайте средства получения для чтения этих значений