子类重写父类方法,路由重复问题

父类中声明了一个抽象方法,返回 值为自己;

子类重写了 这个方法,返回值是子类;

结果导致在getMethods()时获得了2个一模一样的方法名,查了下java 文档,jvm返回值不一致也会当做重载,jvm没有泛型;

有什么别的方式可以解决这个问题吗;

我看了下源码,低版本中是路由重复了直接continue,3.4中是直接抛异常

评论区

Jonsy

2018-07-03 16:00

JFinal

2018-07-03 16:30

参数名不一样即可,但你要用一下 action 带参功能,看这里的文档:
http://www.jfinal.com/doc/3-3

Jonsy

2018-07-03 17:01

@JFinal 我觉得你可能没理解我的意思,我本来是想重写父类的方法,但是父类返回值是返回父类这个对象,子类的返回值返回的是子类这个对象,按之前我的理解,这是重写,但是被jvm识别成了重载。

Jonsy

2018-07-03 17:01

@JFinal Note that there may be more than one matching method in a class because while the Java language forbids a class to declare multiple methods with the same signature but different return types, the Java virtual machine does not. This increased flexibility in the virtual machine can be used to implement various language features. For example, covariant returns can be implemented with bridge methods ; the bridge method and the method being overridden would have the same signature but different return types.

Jonsy

2018-07-03 17:02

@JFinal 这是 getMethods()的官方api解释,也就是这样,获取到了2个一模一样的方法名,在JFinal3.4版本中直接就抛了异常,启动不了了

JFinal

2018-07-03 17:27

@Jonsy 原来是这样

jfinal 的路由不支持 controller 中的 method 重载,即使是参数名不同也不支持,会引发很多问题,所以干脆就没有支持

当然,这里的不支持是指要成为 action 的 public 方法,其它 method 没问题

Jonsy

2018-07-04 08:41

@JFinal 好吧,了解了

热门反馈

扫码入社