Разработка превосходного предложения @rsp:
Создание интерфейса «только для чтения»
public interface MyInterfaceRO {
public int getFoo();
public String getBar();
// etc...
}
Создание интерфейса «чтение-запись», соответствующего вашему B
public interface MyInterfaceRW extends MyInterfaceRO {
public void setFoo(int foo);
public void setBar(String bar);
// ...
}
IMO, самый простой способ сделать то, что вы хотите (предотвратить изменение), это просто вернуть MyInterfaceRO.Вызывающий объект (если он не выполняет приведение) не будет иметь возможности вызывать setFoo (), фактически в своей IDE он даже не увидит .setFoo () в качестве опции.
Я не понимаюпочему вы действительно хотите вернуть тип B (мой RW выше), но, если вы это сделаете, вы застряли с вызывающей стороной, имеющей возможность видеть и вызывать setFoo ().Вероятно, вам лучше всего следовать прецеденту, установленному в коллекциях java, и генерировать исключение UnsupportedOperationException.Для удобства вы можете предложить метод
public boolean isModifiable ();
, но вы не можете заставить вызывающего его использовать и уважать его.