The final keyword will not make your class inmutable. This will avoid extending your class from another class.
public final class Foo {
}
public class Bar extends Foo {
}
The adecuated class project is what will make you an inmutable class, as you can see in duffymo's answer.
, final , :
class Foo {
private final int state
public Foo(int v) {
this.state=v;
}
}
, , duffymo ccould (.. , ), .
final:
public class Foo {
private int state;
private Foo(int v) {
this.state=v;
}
public static Foo getInstance(int value) {
return new Foo(value);
}
}
Foo, Foo.getInstance.
Foo
. , Foo.
public class Bar extends Foo {
private int ohNopes;
public Bar(int v) {
this.ohNopes=v;
}
}
, , , .