我用通用方法创建了一个接口,当在实现该接口的类中重写此方法时,编译器会抱怨说“方法不会从其超类重写方法”。仅当我在抽象方法中添加通用参数时,才会出现此问题。
我创建了一个接口,该接口带有一个通用方法和一个实现此接口的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参数添加到方法时,编译器会抱怨! 任何帮助表示赞赏。谢谢。
答案 0 :(得分:0)
如果您希望将其作为有效替代,则P
,R
和E
在接口上必须是泛型,而不是方法。必须是
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 P
,R
,和E
,而不仅仅是某种特定的组合。