public static List<? extends Class<?>> intersectRawTypes(Class<?> clazz1,
			Class<?> clazz2) {
		if (clazz2 == null) {
			clazz2 = Object.class;
		}
		if (clazz1 == null) {
			clazz1 = Object.class;
		}
        if (clazz1.isPrimitive()) {
            clazz1 = Types.getWrapperClass(clazz1.getName());
        }
        if (clazz2.isPrimitive()) {
            clazz2 = Types.getWrapperClass(clazz2.getName());
        }

		if (clazz1.equals(clazz2)) {
            return singletonList(clazz1);
        }
        if (Types.isAssignable(clazz2, clazz1)) {
            return singletonList(clazz1);
        }
        if (Types.isAssignable(clazz1, clazz2)) {
            return singletonList(clazz2);
        }
        final Set<Class<?>> common = commonClasses(clazz1, clazz2);
        final List<Class<?>> list = list(removeSubClasses(common));
        return list.isEmpty() ? LIST_OF_OBJECT_CLASS : list;

    }
public static List < ? extends Class < ? > > intersectRawTypes ( Class < ? > clazz1 , Class < ? > clazz2 ) { if ( clazz2 == null ) { clazz2 = Object . class ; } if ( clazz1 == null ) { clazz1 = Object . class ; } if ( clazz1 . isPrimitive ( ) ) { clazz1 = Types . getWrapperClass ( clazz1 . getName ( ) ) ; } if ( clazz2 . isPrimitive ( ) ) { clazz2 = Types . getWrapperClass ( clazz2 . getName ( ) ) ; } if ( clazz1 . equals ( clazz2 ) ) { return singletonList ( clazz1 ) ; } if ( Types . isAssignable ( clazz2 , clazz1 ) ) { return singletonList ( clazz1 ) ; } if ( Types . isAssignable ( clazz1 , clazz2 ) ) { return singletonList ( clazz2 ) ; } final Set < Class < ? > > common = commonClasses ( clazz1 , clazz2 ) ; final List < Class < ? > > list = list ( removeSubClasses ( common ) ) ; return list . isEmpty ( ) ? LIST_OF_OBJECT_CLASS : list ; }
Looks for intersection of raw types of classes and all super classes and interfaces.
@param clazz1 one of the classes to intersect
@param clazz2 one of the classes to intersect
@return intersection of raw types of classes and all super classes and interfaces