Cambiar el valor de los objetos

Me preocupa la forma en que puede cambiar los campos en los objetos sin usar realmente las operaciones en ellos.

por ejemplo, digamos que tengo la siguiente clase:

public class MultisetPair {
    private Object element ;
    private int cardinality ;
    public MultisetPair(Object element) {
        this.element = element ;
        cardinality = 1 ;
    }
    public Object getElement() {
        return element ;
    }
    public int getCardinality() {
        return cardinality ;
    }
    public void setCardinality(int cardinality) {
        if(cardinality < 1)
            throw new IllegalArgumentException();
        this.cardinality = cardinality ;
    }
}

y tengo una lista de objetos MultisetPair así:

LinkedList<MultisetPair> multilist = new LinkedList<>();

y hago algo como:

MultisetPair pair = multiset.get(3);
pair.setCardinality(pair.getCardinality()+1);

Esto no solo cambia la cardinalidad del par que acabo de crear, sino que también aumentará la cardinalidad del par en multisetpair (3) por uno.

¿porqué es eso? ¿No debería cambiar solo el par que creé y no el real?

Gracias por delante

Respuesta 1
MultisetPair pair = multiset.get(3);
pair.setCardinality(pair.getCardinality()+1);

esto no solo cambia la cardinalidad del par que acabo de crear, sino que también hará que la cardinalidad del par en multisetpair (3) sea mayor en uno.

Porque estos dos objetos ... son el mismo objeto. No hay dos objetos arriba. Tiene una variable local pairque hace referencia al contenido de su lista en la posición 3. Eso es todo lo que hay que hacer.

Cuando pones un huevo en una caja, y dejas la caja abierta, y luego seleccionas el tercer huevo en esa caja, y lo coloreas ... luego ese tercer huevo en esa caja se colorea.

En otras palabras: puede tener múltiples referencias que apuntan a lo mismo objeto subyacente. Y no importa qué referencia use para acceder a ese objeto, tan pronto como cambie el estado de ese objeto, ese objeto se actualizará.

Respuesta: 2

La documentación de blazegraph para High Availability carece. Para empezar, la documentación indica que descargue el código fuente y ejecute "ant deploy-artifact". Esto es incorrecto ya que han hecho la transición a ...

Hola comunidad de desbordamiento de pila, estoy realizando un procesamiento de varios pasos en algunos datos que recibo con un Servlet de Java. El proceso actual que tengo es que ingreso los archivos a un servidor usando Apache File ...

Subo mi objeto de clase de datos a Firestore, se carga bien, cuando intento descargarlo de otra actividad se produce java.lang.ClassCastException. Necesito el objeto de la clase Cart en AddToCart.java ...

El siguiente código funcionaba bien en java 1.6 y maven 2.2.1: la clase pública GTMEnrollmentOutputRecord extiende com.ibm.ivj.eab.record.cobol.CobolRecord implementa java.io.Serializable {public ...