Referencias de objetos bidireccionales de Java usando "this" en Constructor

Estoy tratando de crear un objeto y un objeto componente que tengan referencias bidireccionales entre sí. En este ejemplo, tengo una clase de bicicleta y una clase de rueda. Una opción que consideré (Opción 1) es hacer que Bike cree Wheel, luego pase una referencia de sí mismo a Wheel en su constructor. Sin embargo, he leído que no debería pasar "esto" fuera de un constructor, y que es mejor crear un objeto Wheel fuera del constructor de Bike. Entonces debería crear Wheel primero, luego pasarlo a Bike, luego llamar al método setBike () para Wheel (Opción 2). Me parece que la Opción 1 es la forma más sencilla de crear las referencias bidireccionales entre Bike y Wheel, pero también parece estar violando algunos principios de diseño. ¿Alguien puede explicar por qué la opción 2 sería preferible a la opción 1?

Opción 1:

public class Wheel {

    private Bike bike;

    Wheel(Bike bike) {
        this.bike = bike;
    }
}

public class Bike {

    private Wheel wheel;

    Bike() {
        this.wheel = new Wheel(this);
    }
}

Bike bike = new Bike();

Opcion 2 :

public class Wheel {

    private Bike bike;

    public void setBike(Bike bike) {
        this.bike = bike;
    }
}

public class Bike {

    private Wheel wheel;

    Bike(Wheel wheel) {
        this.wheel = wheel;
    }
}

Wheel wheel = new Wheel();
Bike bike = new Bike(wheel);
wheel.setBike(bike);
Respuesta 1

Estoy tratando de generar matrices y calcular sus valores dependiendo de alguna función. y quiero guardar cada matriz generada en la lista List PQ. Los métodos importantes son: init: para iniciar una serie ...

Para la escuela, estaba creando un programa de Geometría simple que pedía la cantidad de esquinas y coordenadas de una figura. Para evitar la entrada incorrecta (es decir, caracteres en lugar de enteros), pensé que usaría una excepción ...

Tengo un solo archivo que envía SMS a diferentes redes móviles de acuerdo con los argumentos de la línea de comando que le pasaron. Vodafone, 3 network, T-Mobile, O2 ... etc. Entonces, cuando se pasa el argumento $ Run ...

Estoy escribiendo un proyecto java para insertar datos en neo4j usando una consulta de cifrado. Quiero evitar que neo4j cree un nodo duplicado, en lugar de vincular el otro nodo con el nodo existente. CREATE (n1: nodo {...