i'm confused on why:
HATEOASController interface:
public interface HATEOASController {
    ResponseEntity<?> findAll(Pageable pageable);
    ResponseEntity<?> findById(Long id);
}
EstadoController:
     public class EstadoController implements HATEOASController {
           //other methods
       @GetMapping(value={"/", ""})
       public ResponseEntity<?> findAll(Pageable pageable){
      
            Page<Estado> estados = estadoService.findAll(pageable);
            estados.forEach(i->{               //**HERE**
                                              //   \/
                HATEOASBuilder.linksBuilder(i, EstadoController.class);
                HATEOASBuilder.linksBuilderWithMap(i.getCidades());
            });
        return new ResponseEntity(estados, HttpStatus.OK);
    }
HATEOASBuilder:
public static void linksBuilder (HATEOASBuilder estado, Class<? extends HATEOASController> ControllerClass){
//methods}
This above works, but like this below:
HATEOASBuilder:
public static void linksBuilder (HATEOASBuilder estado, Class<HATEOASController> ControllerClass){
    //methods}
doesn't work (Required type:Class< HATEOASController >, Provided:Class< EstadoController >)
Using interface argument doesn't mean that i can pass any class implementing it? (EstadoController in this case), i don't get why the extends is needed
