У меня был бы метод setS (String s), который правильно устанавливает x int. Используйте это ваш конструктор. Если вы не хотите, чтобы s или x были общедоступными, сделайте метод setS закрытым / защищенным / по умолчанию.
class Foo {
int x;
String s;
private setS(String s) { this.s=s;this.x=s.length();}
Foo(String s) {
setS(s);
}
}
Другое решение (которое, кажется, более точно соответствует тому, что вы пытаетесь сделать) - это исключить x int. Обеспечение:
int getX() { return s.length(); }
вместо члена x.
Если x действительно суррогат для гораздо более сложного объекта, попробуйте:
class Foo {
private Object complex;
private String s;
Foo(String s){ this.s = s;}
Object getComplex() {
if (complex == null) {
*complex=new Complex(s);
}
return complex;
}
}
* Может потребоваться добавить синхронизированную или дважды проверенную блокировку здесь для обеспечения безопасности потока.