clone immutable object in Java

clone, immutability, java

Solution

How about just returning a new object with the new value:

// as mentioned by AndrewBissell, there is no reference to the bundle
// luckily, we only need the direction from the bundle :)
private final int _direction;

WeightedEdge(Bundle bundle, Vertex target, int weight) {
    this(bundle.getDirection(), target, weight);
}

WeightedEdge(int direction, Vertex target, int weight)
{
    _direction = direction;
    _weightedEdgeComparator = new EdgeComparator(_direction);
    _target = target;
    _weight = weight;

}

WeightedEdge updatedObject(int newWeight)
{
    return new WeightedEdge(_direction, _target, newWeight);
}

Problem

i have an immutable object that has weight as int, in my code, i need to update the weight, inroder to do that, i need to make a copy of that object and set the weight with updated value. but the object doesn't have a clone() override, and i don't know which way is better, clone() or implement Cloneable interface? here is my class: ``` public class WeightedEdge implements Edge { private final WeightedEdgeComparator _weightedEdgeComparator; private final Vertex _target; private final int _weight; WeightedEdge(Bundle bundle, Vertex target, int weight) { _weightedEdgeComparator = new EdgeComparator(bundle.getDirection()); _target = target; _weight = weight; } @Override public Vertex target() { return _target; } @Override public int weight() { return _weight; } @Override public int compareTo(WeightedEdge o) { return _EdgeComparator.compare(this, o); } @Override public int hashCode() {...} @Override public boolean equals(Object obj) { ... } @Override public String toString() { ... } ```

Original source