Неизменяемый тип: общедоступные конечные поля против геттера

Мне нужен небольшой класс-контейнер для хранения некоторых строк, которые должны быть неизменяемыми. Поскольку сама String является неизменяемым типом, я подумал о чем-то вроде этого:

public final class Immu
{
  public final String foo;
  public final String bar;

  public Immu(final String foo, final String bar)
  {
    this.foo = foo;
    this.bar = bar;
  }
}

Многие люди вообще возражают против использования общедоступных полей и вместо этого используют геттеры. ИМХО, в данном случае это будет просто шаблон, потому что сама строка неизменяема.

Другие мысли, которые мне могут не хватать по этому поводу?

53
задан Daniel 3 August 2011 в 03:05
поделиться

1 ответ

Забудьте об инкапсуляции, неизменности, оптимизации и всем другом хвастовстве. Если бы Вы пытаетесь написать хороший код Java, я рекомендовал бы просто использовать метода get просто, потому что это - дружественный Java, и самое главное это сохраняет тонну времени, гугля почему.

, Например, Вы, вероятно, не ожидали бы использовать потоки, когда Вы пишете код, но позже Вы нашли

listOfImmus.stream().map(immu -> imm.foo).collect(Collectors.toSet()); // with field
listOfImmus.stream().map(Immu::getFoo).collect(Collectors.toSet());    // with getter

Supplier<String> s = () -> immu.foo;  // with field
Supplier<String> s = immu::foo; // with getter

// final fields are hard to mock if not impossible. 
Mockito.when(immuMock.getFoo()).thenReturn("what ever");

//one day, your code is used in a java Beans which requires setter getter..
¯\_(ツ)_/¯

, Этот список может быть длинным или коротким или не может быть ни одним из них, имеет любой смысл к Вашему варианту использования. Но необходимо провести время, убеждая себя (или Ваши рецензенты кода), почему Вы можете или должны бунтовать против ортодоксальности Java.

Это лучше просто записать методу get/методу set и провело время для чего-то более полезного: как java

жалобы
0
ответ дан 7 November 2019 в 08:37
поделиться
Другие вопросы по тегам:

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