javap结果中的复制方法

javap结果中的复制方法,java,generics,javap,Java,Generics,Javap,BaseController中有一种方法,例如 public abstract class BaseManagementController<V, F extends BaseForm> { @PostMapping @ResponseStatus(HttpStatus.CREATED) protected void add(@Valid @RequestBody F form, HttpServletRequest request) { /

BaseController中有一种方法,例如

public abstract class BaseManagementController<V, F extends BaseForm> {

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    protected void add(@Valid @RequestBody F form, HttpServletRequest request) {
        // ...
    }
}
为什么有两个加法?超载了吗

“为什么有两种添加方法?”

因为可能有一些功能可能更普遍地适用于所有
控制器
,并且可以在
BaseManagementController.add()中实现这些功能

子类的
add()
可以简单地调用
super.add()
并在其super的实现中利用现有的功能

“是否超载?”

不,但它是

在C类中声明或由C类继承的实例方法将重写在A类中声明的另一个方法
mA
,如果以下所有条件均为真:

  • C是a的一个子类
  • C不继承
    mA
  • mC的签名是
    mA
    签名的子签名()
  • 以下其中一项是 正确:
    • mA
      是公共的
“为什么有两种添加方法?”

因为可能有一些功能可能更普遍地适用于所有
控制器
,并且可以在
BaseManagementController.add()中实现这些功能

子类的
add()
可以简单地调用
super.add()
并在其super的实现中利用现有的功能

“是否超载?”

不,但它是

在C类中声明或由C类继承的实例方法将重写在A类中声明的另一个方法
mA
,如果以下所有条件均为真:

  • C是a的一个子类
  • C不继承
    mA
  • mC的签名是
    mA
    签名的子签名()
  • 以下其中一项是 正确:
    • mA
      是公共的
public class BannerController extends BaseManagementController<BannerVO, BannerForm> {
    @Override
    public void add(@Valid @RequestBody BannerForm form, HttpServletRequest request) {
        super.add(form, request);
    }
}
 public void add(com.foo.admin.web.vo.BannerForm, javax.servlet.http.HttpServletRequest);
    descriptor: (Lcom/foo/admin/web/vo/BannerForm;Ljavax/servlet/http/HttpServletRequest;)V
    flags: ACC_PUBLIC


  public void add(com.foo.admin.web.vo.BaseForm, javax.servlet.http.HttpServletRequest);
    descriptor: (Lcom/foo/admin/web/vo/BaseForm;Ljavax/servlet/http/HttpServletRequest;)V
    flags: ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC

public abstract class BaseManagementController<V, F extends BaseForm> {

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    protected void add(@Valid @RequestBody F form, HttpServletRequest request) {
        /* ...All Controllers need to do this... */
        controlStuff(form, request);
    }

    private void controlStuff(F form, HttpServletRequest request) {
        /* ...do whatever Controllers do...*/
    }
}
public class BannerController extends BaseManagementController<BannerVO, BannerForm> {

    @Override
    public void add(@Valid @RequestBody BannerForm form, HttpServletRequest request) {
        super.add(form, request);
        processBanner(form, request);
    }

    private void processBanner(BannerForm form, HttpServletRequest request) {
        /*...do something special for banners...*/
    }
}