泛型“方法不会覆盖其超类中的任何方法”

时间:2019-07-15 02:15:43

标签: java generics methods interface overriding

我用通用方法创建了一个接口,当在实现该接口的类中重写此方法时,编译器会抱怨说“方法不会从其超类重写方法”。仅当我在抽象方法中添加通用参数时,才会出现此问题。

我创建了一个接口,该接口带有一个通用方法和一个实现此接口的Class。

package me.work.rest;
public interface RestControllerFacade<T> {
    <P, R, E extends Throwable> R retrieveCollectionResources(P p) throws E ;
}

@RestController
@RequestMapping("api/v1/Users")
public class UserResource implements RestControllerFacade<User> {
    @GetMapping( produces = MediaType.APPLICATION_JSON_VALUE )
    @Override
    public ResponseEntity<Page<User>> retrieveCollectionResources(Pageable 
    pageable) throws ResourceNotFoundException {
        code...
        return ...;
    }
}

编译器说“方法不会从其超类重写方法”。 顺便说一下,这段代码对我有用:

package me.work.rest;
public interface RestControllerFacade<T> {
    <R, E extends Throwable> R retrieveCollectionResources() throws E ;
}

@RestController
@RequestMapping("api/v1/Users")
public class UserResource implements RestControllerFacade<User> { 
@GetMapping( produces = MediaType.APPLICATION_JSON_VALUE )
    @Override
    public ResponseEntity<Page<User>> retrieveCollectionResources() throws ResourceNotFoundException {
        code...
        return ...;
    }
}

仅在将P参数添加到方法时,编译器会抱怨! 任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您希望将其作为有效替代,则PRE接口上必须是泛型,而不是方法。必须是

public interface RestControllerFacade<P, R, E extends Exception, T> {
    R retrieveCollectionResources(P p) throws E ;
}

@RestController
@RequestMapping("api/v1/Users")
public class UserResource implements 
        RestControllerFacade<
           Pageable, 
           ResponseEntity<Page<User>>, 
           ResourceNotFoundException, 
           User> {
    @GetMapping( produces = MediaType.APPLICATION_JSON_VALUE )
    @Override
    public ResponseEntity<Page<User>> retrieveCollectionResources(Pageable 
    pageable) throws ResourceNotFoundException {
        code...
        return ...;
    }
}

任何 RestControllerFacade的编写方式必须能够用于 any PR,和E,而不仅仅是某种特定的组合。