public class FieldAccess { class MyClass { Object field = new Object(); } class MyException extends RuntimeException { Object field = new Object(); } class MyExceptionA extends MyException {} class MyExceptionB extends MyException {} @SuppressWarnings("nullness") class MyGen<T extends MyClass> { T myClass = null; } void test(Object o, MyGen raw) { // Raw type field access: raw.myClass.field = new Object(); // Intersection type field access Object a = ((MyClass & Cloneable) o).field; try { } catch (MyExceptionA | MyExceptionB ex) { // Union type field access ex.field = new Object(); } } }