Мне нужен небольшой класс-контейнер для хранения некоторых строк, которые должны быть неизменяемыми. Поскольку сама 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;
}
}
Многие люди вообще возражают против использования общедоступных полей и вместо этого используют геттеры. ИМХО, в данном случае это будет просто шаблон, потому что сама строка неизменяема.
Другие мысли, которые мне могут не хватать по этому поводу?
Забудьте об инкапсуляции, неизменности, оптимизации и всем другом хвастовстве. Если бы Вы пытаетесь написать хороший код 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
жалобы