1) Why obj4, obj6, obj7 give compile error, and obj5 is fine? Where can I read about rules, regulating using such generic coupled outer-inner classes? I found nothing directly to the point.
When I don't supply any type argument for Inner class in obj3 it is fine (while Inner class needs to be given something for for its fld3 field of type S), but when I do the same and do not supply type for Outer class - it does not compile (obj4) - though Object could be implied...
2) Besides, why obj10 compiles fine, but obj11 fails? In obj10 line I also write outerInstance.new Inner<>(), implying for Inner that S is Object. But this is not problem for inner, but same "trick" is problem for Outer...
        //in Class A of package com.sth
        public class MyGen<T> {
            T fld1;
            class GenInner<S> {
                T fld2;
                S fld3;
            }
                // within main of Class Driver of same package com.sth
                MyGen.GenInner obj1 = new MyGen<String>().new GenInner<Integer>();
                MyGen.GenInner obj2 = new MyGen<String>().new GenInner<>();
                MyGen.GenInner obj3 = new MyGen<String>().new GenInner();
                //MyGen.GenInner obj4 = new MyGen().new GenInner<String>();  //ERR !
                MyGen.GenInner obj5 = new MyGen<>().new GenInner<String>();
                //MyGen<String>.GenInner obj6;  // ERR
                //MyGen.GenInner<String> obj7;  // ERR
                MyGen<String>.GenInner<Integer> obj8;
                MyGen.GenInner obj9;     
  MyGen<String>.GenInner<Integer> obj10 = new MyGen<String>().new GenInner<>();
  //Type mismatch: cannot convert from MyGen<Object>.GenInner<Integer> to MyGen<String>.GenInner<Integer>
  //MyGen<String>.GenInner<Integer> obj11 = new MyGen<>().new GenInner<Integer>();  // ERR!
These answers relate to my question, but do not provide any clue:
 
    