Я думаю, вы должны изменить свой код на что-то подобное
<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>
Статика не совсем означает «общий для всех экземпляров» - это означает «не связанный с конкретным экземпляром в все". Другими словами, вы можете получить статическое поле в классе A, даже не создавая каких-либо экземпляров.
Что касается запуска двух программ в одной и той же JVM - это действительно зависит от того, что вы подразумеваете под «выполнением». две программы ". Статическое поле эффективно связано с объектом класса, который, в свою очередь, связан с загрузчиком классов. Поэтому, если эти две программы используют отдельные экземпляры загрузчика классов, у вас будут две независимые статические переменные. Если они оба используют один и тот же загрузчик классов, тогда будет только один, чтобы они видели друг друга » с изменениями.
Что касается альтернативы - есть различные варианты. Один из них - передать ссылку на «общий» объект в конструктор каждого создаваемого вами объекта, который в этом нуждается. Затем необходимо сохранить эту ссылку для дальнейшего использования. Это может быть немного больно и высосать немного больше памяти, чем статический подход, но это облегчает тестирование.
Статические методы и члены не поощряются, потому что ими часто злоупотребляют, но это похоже на ситуацию, когда статический - правильный путь. Что касается статического общего доступа для нескольких программ, это не так. Каждая программа работает в совершенно отдельной среде.
Если предположить, что все находится в одном загрузчике классов, то почему бы не использовать шаблон 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());