Seems that it’s better to parameterize Socket and Wire with color:
interface Socket<C extends Color> {}
interface Wire<C extends Color> {}
class RedSocket implements Socket<Red> {}
class GreenSocket implements Socket<Green> {}
class RedWire implements Wire<Red> {}
class GreenWire implements Wire<Green> {}
This way you can introduce one more generic parameter to the Connection:
public class Connection<C extends Color, M extends Wire<C>, Q extends Socket<C>> {...}
And use it like this:
new Connection<Red, RedWire, RedSocket>(); // ok
new Connection<Green, GreenWire, GreenSocket>(); // ok
new Connection<Green, GreenWire, RedSocket>(); // error