Как прочитать переменную из другого класса?

#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"