Что точное означает статических полей в Java?

Я думаю, вы должны изменить свой код на что-то подобное

  <form [formGroup]="formAlta" (ngSubmit)="addRepresentacio()">
        <div class="form-group">
          <label for="namePro">Nom</label>
          <input id="namePro" class="form-control" formControlName="namePro" placeholder="Nom del professional" required>
          <div *ngIf="formAlta.controls['namePro'].invalid && (formAlta.controls['namePro'].dirty || formAlta.controls['namePro'].touched)" class="alert alert-danger form-danger" role="alert">

    <div *ngIf="formAlta.controls['namePro'].errors.required">
        El Nom del professional es obligatori
    </div>
</div></form>
34
задан Welbog 28 April 2009 в 13:46
поделиться

4 ответа

Статика не совсем означает «общий для всех экземпляров» - это означает «не связанный с конкретным экземпляром в все". Другими словами, вы можете получить статическое поле в классе A, даже не создавая каких-либо экземпляров.

Что касается запуска двух программ в одной и той же JVM - это действительно зависит от того, что вы подразумеваете под «выполнением». две программы ". Статическое поле эффективно связано с объектом класса, который, в свою очередь, связан с загрузчиком классов. Поэтому, если эти две программы используют отдельные экземпляры загрузчика классов, у вас будут две независимые статические переменные. Если они оба используют один и тот же загрузчик классов, тогда будет только один, чтобы они видели друг друга » с изменениями.

Что касается альтернативы - есть различные варианты. Один из них - передать ссылку на «общий» объект в конструктор каждого создаваемого вами объекта, который в этом нуждается. Затем необходимо сохранить эту ссылку для дальнейшего использования. Это может быть немного больно и высосать немного больше памяти, чем статический подход, но это облегчает тестирование.

67
ответ дан 27 November 2019 в 16:39
поделиться

Статические методы и члены не поощряются, потому что ими часто злоупотребляют, но это похоже на ситуацию, когда статический - правильный путь. Что касается статического общего доступа для нескольких программ, это не так. Каждая программа работает в совершенно отдельной среде.

2
ответ дан 27 November 2019 в 16:39
поделиться

То, что вы ищете, называется Singleton Pattern .

0
ответ дан 27 November 2019 в 16:39
поделиться

Если предположить, что все находится в одном загрузчике классов, то почему бы не использовать шаблон monostate для этого?

Ваша общая статическая информация скрыта в моностате:


  public class Monostate {

      private static String str = "Default";

      public String getString() {
          return str;
      }

      public void setString(String s) {
          str = s;
      }
  }

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

   Monostate mono = new Monostate();
   mono.setString("Fred");
   System.out.println(mono.getString());
-1
ответ дан 27 November 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: