#java #android
#java #Android
Вопрос:
Мне интересно, как я могу прочитать переменную из одного класса в другой?
У меня есть два класса, triangle .java и screen.java
в треугольнике.java у меня есть: public double bound = 0;
как мне прочитать эту переменную в Screen.java ?
triangle.java:
public class triangle extends Activity
{
public EditText txtbound;
public double bound = 0;
txtbound = (EditText)findViewById(R.id.txtbound);
public double calculate()
{
bound=Double.parseDouble(txtbound.getText().toString());
// do maths here
}
}
и экран.java имеет:
double bound1 = triangle.bound;
это не работает, как мне получить переменную в Screen.java ? Спасибо!
Ответ №1:
сделайте bound1 закрытым в классе Screen, например
private double bound1; //do not initialize fields here
Используйте геттеры / сеттеры на экране, например
public double getBound() {
return bound1;
}
public void setBound(double bound1) {
this.bound1 = bound1;
}
В треугольнике получить экземпляр Screen:
Screen scr = new Screen();
scr.setBound(this.bound); --> this way the bound1 in Screen will have the value of bound from Triangle
Принято называть классы, начинающиеся с заглавных букв.
Вам также не нужно инициализировать поля вашего класса при их объявлении.
Для этого лучше использовать конструкторы.
Я предлагаю вам прочитать это руководство, чтобы лучше ознакомиться с классами, полями и переменными. Сэкономит ваше время в долгосрочной перспективе.
Ответ №2:
выполните public static double bound=0
в triangle.java
затем после импорта triangle.java , вы можете сделать double bound1 = triangle.bound
на экране.java или в любом другом something.java
Комментарии:
1. и это потому, что тогда ‘bound’ будет переменной класса, а не переменной экземпляра, для получения дополнительной информации читайте download.oracle.com/javase/tutorial/java/javaOO/classvars.html
Ответ №3:
Вы не можете получить значение triangle.bound без экземпляра класса Triangle . Но поскольку это действие, вам может потребоваться сделать привязку статической.
public static double bound = 0;
но хорошей практикой является привязка статической переменной в другом классе (который не является activity) и установка / получение ее значения оттуда.
public class MyClass
{
public static double bound = 0;
}
А затем установите ее значение в классе triangle и используйте его в Screen.java
Ответ №4:
В соглашениях Java говорится, что вам нужен метод getBound(), который возвращает значение экземпляра.
Использование статической переменной нормально, если это переменная уровня класса, и все экземпляры могут использовать одно и то же значение, но в этом случае я бы, скорее всего, предоставил обычный геттер.
Ответ №5:
Вы можете получить доступ к атрибуту другого класса, только создав из него объект, подобный
double bound1 = new Triangle().bound;
Или вам нужно сделать переменную статической, чтобы для переменной не требовался экземпляр объекта, например
public static double bound = 0;
И использовать, как
double bound1 = Triangle.bound;
Я не заметил раньше, но ваш класс расширяет класс activity, в этом случае используйте статический метод. Вы не должны создавать экземпляры activity, используя ‘new’
Чтобы разделить значения между действиями, вы можете расширить класс application. И добавьте туда свои атрибуты. Вы можете получить доступ к экземпляру класса с помощью этой команды
MyApplication appContext = (MyApplication)getApplicationContext();
double bound1 = appContext.bound;
Это одноэлементный элемент, поэтому он всегда будет возвращать один и тот же экземпляр.
Чтобы это сработало, вам нужно добавить это в тег приложения файла манифеста
android:name=".MyApplication"