private static boolean isAssignableFrom ( WildcardType type1 , Type type2 ) { if ( ! isAssignableFrom ( type1 . getUpperBounds ( ) [ 0 ] , type2 ) ) { return false ; } if ( type1 . getLowerBounds ( ) . length > 0 && ! isAssignableFrom ( type2 , type1 . getLowerBounds ( ) [ 0 ] ) ) { return false ; } return true ; }
This logic is shared for all actual types i . e . raw types parameterized types and generic array types .