Java: typy wieloznaczne niezgodności wyników w błędzie kompilacji

W moim projekcie stworzyłem klasę fabryczną, która pozwoli mi (teoretycznie) na tworzenie menedżerów dla dowolnego (obsługiwanego) danego typu. Interakcja z menedżerem pozwala mi zmieniać pewne właściwości danego typu. Problem, przed którym stoję, to próba utworzenia menedżera dla typu ogólnego, kompilator miażdży moje nadzieje i marzenia.

Poniższy kod jest okrojoną wersją tego, z czym pracuję. Linia, w której próbuję utworzyć mój „test3Manager”, nie zostanie skompilowana i próbuję zrozumieć, dlaczego tak jest. Linie poniżej pokazują „obejście”, którego próbuję uniknąć.

    import java.util.List;

    public class GenTest {
        public static void main(String[] args) {
            String test1 = "";
            IRandomType<String> test2 = null;
            IAnotherRandomType<?> test3 = null;

            IManager<String> test1Manager = Factory.createManager(test1);
            IManager<IRandomType<String>> test2Manager = Factory.createManager(test2);
            IManager<IAnotherRandomType<?>> test3Manager = Factory.createManager(test3); // Doesn't compile. Why?

            // Work around?
            IManager<?> test3ManagerTmp = Factory.createManager(test3);
            IManager<IAnotherRandomType<?>> test3Manager2 = (IManager<IAnotherRandomType<?>>) test3ManagerTmp;
        }

        public interface IRandomType<T> {}
        public interface IAnotherRandomType<T> {}
        public interface IManager<T> {}

        public static class Factory {
            public static <T> IManager<T> createManager(T object) {
                return null;
            }
        }
    }

Dokładny komunikat o błędzie kompilacji to:

    Type mismatch: cannot convert from GenTest.IManager<GenTest.IAnotherRandomType<capture#1-of ?>> to GenTest.IManager<GenTest.IAnotherRandomType<?>>

Podobne pytania zostały zadane wcześniej (patrz poniżej); nie wiem jednak, czy to pytanie jest uważane za ich duplikat. Mówię to tylko dlatego, że mam problemy z wnioskami o odpowiedzi na te pytania. Mam nadzieję, że ktoś wyjaśni, co robię źle z moim używaniem leków generycznych.

Podobne pytania dotyczące SO to:

Błąd kompilatora związany z ograniczoną liczbą znaków zastępczychNiezgodne typy symboli wieloznacznych, które powinny być kompatybilne

questionAnswers(1)

yourAnswerToTheQuestion