### Question:
TypeRef { @SuppressWarnings("unchecked") public final Class<? super T> rawType() { Class<?> clz = rawType; if (clz == null) { try { clz = findRawType(type); } catch (IllegalArgumentException e) { throw new AssertionError("couldn't get raw type of: " + type, e); } rawType = clz; } return (Class<? super T>) clz; } protected  TypeRef(); private  TypeRef(Type type); final Type type(); @SuppressWarnings("unchecked") final Class<? super T> rawType(); @SuppressWarnings("unchecked") final Class<T> exactRawType(); @Override boolean equals(@Nullable Object obj); @Override int hashCode(); @Override String toString(); static TypeRef<?> from(Type type); static TypeRef<U> from(Class<U> rawType);  }### Answer:
@Test void rawType_rawType() { var ref = new TypeRef<String>() {}; assertEquals(String.class, ref.rawType()); }
@Test void rawType_parameterizedType() { var ref = new TypeRef<List<String>>() {}; assertEquals(List.class, ref.rawType()); }
@Test <T> void rawType_typeVariableNoBounds() { var ref = new TypeRef<T>() {}; assertEquals(Object.class, ref.rawType()); }
@Test <T extends Dummy1> void rawType_typeVariableOneBound() { var ref = new TypeRef<T>() {}; assertEquals(Dummy1.class, ref.rawType()); }
@Test <T extends Dummy1 & Dummy2> void rawType_typeVariableTwoBounds() { var ref = new TypeRef<T>() {}; assertEquals(Dummy1.class, ref.rawType()); }
@Test void rawType_parameterizedTypeArray() { var ref = new TypeRef<List<String>[]>() {}; assertEquals(List[].class, ref.rawType()); }
@Test <T> void rawType_typeVariableArrayNoBounds() { var ref = new TypeRef<T[]>() {}; assertEquals(Object[].class, ref.rawType()); }
@Test <T extends Dummy1 & Dummy2> void rawType_typeVariableArrayTwoBounds() { var ref = new TypeRef<T[]>() {}; assertEquals(Dummy1[].class, ref.rawType()); }
@Test <T extends Dummy1 & Dummy2> void rawType_typeVariable3DArrayTwoBounds() { var ref = new TypeRef<T[][][]>() {}; assertEquals(Dummy1[][][].class, ref.rawType()); }
@Test <T extends Dummy1 & Dummy2, Y extends T, X extends Y> void rawType_typeVariableWithTypeVariableBound() { var ref = new TypeRef<X>() {}; assertEquals(Dummy1.class, ref.rawType()); }
@Test <T extends List<String>> void rawType_typeVariableWithParameterizedTypeBounds() { var ref = new TypeRef<T>() {}; assertEquals(List.class, ref.rawType()); }
@Test <T extends Dummy1 & Dummy2, Y extends T, X extends Y> void rawType_typeVariable3DArrayWithTypeVariableBound() { var ref = new TypeRef<X[][][]>() {}; assertEquals(Dummy1[][][].class, ref.rawType()); }