EL支持重载方法吗?

djm*_*jmj 29 overloading el

我升级了我的Java EE Web应用程序以使用更新的PrimeFaces版本,突然在PrimeFaces commandlink的action属性中调用重载的bean方法不再起作用.我试图使用JSF默认的commandlink来测试它,这个也没用.

方法签名如下:

public void updateA(B b);
public void updateA(A a);
Run Code Online (Sandbox Code Playgroud)

它总是试图将A转换为B.

更好奇的是,它在升级之前如何运作?

Bal*_*usC 37

EL不支持它,不.它将始终是Class#getMethods()数组的第一个方法,其名称(和参数数量)与EL方法调用匹配.它是否每次都返回相同的方法取决于所使用的JVM make/version.也许您同时也进行了Java SE升级.javadoc甚至说:

返回的数组中的元素没有排序,也没有任何特定的顺序.

您不应该依赖未指定的行为.给他们一个不同的名字.

  • 搜索最准确的重载方法不适用于EL的事实很糟糕. (4认同)
  • @alexvii:作为回答,`getMethods()`不一定返回固定的顺序. (2认同)