No, there really is no way to create immutable objects from anywhere. If you want something immutable, it must be immutable (final) throughout the tree.
eg. The following example uses final in all places (except the root), but is still not able to prevent any changes:
public class justAnInt { public int a = 0; public int b = 0; }
source share