нестатический внутренний класс выполнит все ваши желания:
public class Foo {
protected String member;
public Foo(String member) {
this.member = member;
}
public class Bar {
protected String member;
public Bar(String member) {
this.member = member;
}
public void show() {
System.out.println("this.member: " + this.member + "; Foo.this.member: " + Foo.this.member);
}
}
public static void main(String[] args) throws javax.mail.MessagingException, java.io.IOException {
Foo foo_a = new Foo("a");
Foo foo_b = new Foo("b");
Bar bar_a1 = foo_a.new Bar("1");
Bar bar_a2 = foo_a.new Bar("2");
Bar bar_b1 = foo_b.new Bar("1");
Bar bar_b2 = foo_b.new Bar("2");
bar_a1.show();
bar_a2.show();
bar_b1.show();
bar_b2.show();
}
}
Ну, хорошо, хорошо, (-2 голоса спустя):
Во-первых, ни одно из вышеперечисленных решенийобратитесь к той части исходного вопроса, что не может быть точно один файл, совместно используемый всеми объектами.Одной группе объектов может потребоваться общий доступ к файлу A, а другому файлу группы B и т. Д.Решение внутреннего класса, приведенное выше, предназначено для выполнения именно этого требования.Вы создаете экземпляр внешнего класса один раз для каждого файла / группы и создаете экземпляры внутренних объектов для группы из одного и того же внешнего объекта.
Во-вторых, статический - плохой выбор: вполне вероятно, что файл может потребоватьсяуказывается позже во время выполнения, а не при запуске программы.Приведенная выше структура внешнего / внутреннего класса решает именно эту проблему.Вы создаете экземпляр внешнего класса всякий раз, когда вам нужно.Статическая инициализация не требуется (и никаких сложных схем для отложенной статической инициализации).
В-третьих, паранойя потоков просто не была проблемой в этой проблеме (или в этом решении).Совершенно очевидно, что файл предназначен только для чтения и, следовательно, является неизменяемым, поэтому одновременное решение этой проблемы будет только отвлекать внимание от элегантных решений.
Наконец, если говорить об элегантности, то это, и, вероятно, единственныйодин.
Это обновление предназначено в основном для новичков, которые приходят и смотрят на ветку, поскольку отрицательные избиратели в этой ветке, вероятно, получат это значение до -5.