public class Main {
    
	static class HasId<I> {}
	static class HasStringId extends HasId<String> {}
	static class Alert<T extends /*Some*/Object> extends HasStringId {}
	static class BaseController<M extends HasId<String>> {
	    // abstract Class<M> getModelClass();
	}
	@SuppressWarnings("rawtypes")
	static class AlertController extends BaseController<Alert> { // error here
	    // @Override Class<Alert> getModelClass() {
	    //     return Alert.class;
	    // }
	}
	
	public static void main(String[] args) { }
}