java - 抽象类作为接口(interface)中的属性,将被子类覆盖

标签 java spring inheritance spring-boot

鉴于 Bean 是一个抽象类,并且 Venue 类扩展了 Bean。 ControllerInterface是一个接口(interface),VenueController实现了这个接口(interface)。

界面

public interface ControllerInterface {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List getAll();

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Bean getOneById(@PathVariable(value = "id", required = true) String id);

    @RequestMapping(value = "/{id}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public @ResponseBody Bean updateOne(@PathVariable("id") String id,Bean beanData);

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String addOne();
}

普通类

public class VenueController implements ControllerInterface{

    @Autowired
    VenueDAO venueDAO;

    @Override
    public List<Venue> getAll() {
        return venueDAO.findAll();
    }

    @Override
    public Bean getOneById(@PathVariable(value = "id", required = true) String id) {
        return venueDAO.findBy(id);
    }

    @Override
    public String addOne() {
        // TODO : add a new venue and return its id
        return null;
    }

    @Override
    @RequestMapping(value = "/{id}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public @ResponseBody Bean updateOne(@PathVariable("id") String id, Bean data) {
        Venue venueData = (Venue) data;
        Venue venue = venueDAO.findBy(id);
        Util.copyNonNullProperties(venueData, venue);
        venueDAO.update(venue);
        return null;
    }


}

显然这段代码会导致 public @ResponseBody Bean updateOne(@PathVariable("id") String id, Bean data) 中出现 InstantiationException 因为Bean是一个抽象类,无法初始化它。

所以我的问题是如何使这成为可能? 我想过将 Bean 数据 更改为 Venue 数据,但它不起作用,因为这会更改方法签名并且不会被覆盖。

有什么想法吗?

最佳答案

只是一些建议,请小心您的带注释的方法被继承,我多次发现我的注释没有执行,并且这些错误变得非常难以追踪。

您将需要使用泛型ControllerInterface<SOME extends Bean> ,然后使用SOME而不是Bean .

问候

关于java - 抽象类作为接口(interface)中的属性,将被子类覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762185/

相关文章:

java - 更好地设计跨方法的常见错误处理

java - 如何使用 jpa 规范向子查询添加和构建动态谓词?

C#角色服装系统

java - 不需要的静态变量

java - Amazon S3GeneratePresignedUrlRequest - 新文件

java - 为什么这个 Java Android SHOUTcast MediaPlayer 应用程序代码不起作用?

java - 调用ServletOutputStream后转发到JSP

java - Spring 中的单例与 Autowired 字段

java - Activity 是 MainFragmentListener 的实例,是真的吗?

C++ : How to bind inherited methods only to parent classes?