为什么ArrayList没有getSize()而不是size()?

时间:2012-01-07 18:59:00

标签: java jsp javabeans

我在一些JSP页面中大量使用ArrayList。我想像这样访问一个ArrayList:

${myArrayList.size}

但是,由于对象必须符合JavaBean标准,而JSP / JSTL中的myArrayList.getMyPropertyName()${myArrayList.myPropertyName},因此无法访问myArrayList.size()函数。

我应该使用另一个课吗?

更新

有点难以接受一个功能,例如在JSP中获取ArrayList的大小只是为了更清晰的一个衬里,但似乎设计师选择.size()而不是{{ 1}}

如果您支持.getSize()${fn:length(myArrayList)}语法,我想这确实不是问题。

3 个答案:

答案 0 :(得分:11)

  

标题说明了一切:为什么ArrayList没有getSize()而不是size()?

如“Java Collections API Design FAQ”中所述:

  

为什么不使用“豆式名称”来保持一致性?

     

虽然新集合方法的名称不符合   “Beans命名惯例”,我们相信它们是   合理,一致和适合其目的。这应该   要记住,Beans命名约定不适用于   JDK作为一个整体; AWT确实采用了这些惯例,但那样   决定有点争议。我们怀疑   集合API将非常普遍地使用,通常使用   多行方法调用单行代码,因此非常重要   名字很短。例如,考虑迭代器   方法。目前,集合上的循环如下所示:

    for (Iterator i = c.iterator(); i.hasNext(); )
        System.out.println(i.next());
即使Collection名称是一行,所有东西都整齐地放在一行上   一个长长的表达。如果我们将方法命名为“getIterator”,   “hasNextElement”和“getNextElement”,这将不再是   案件。因此,我们采用了“传统的”JDK风格而不是   豆类风格。

答案 1 :(得分:5)

您使用fn:length JSTL函数(请参阅docs)。

首先,在JSP的顶部声明fn命名空间:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

然后:

${fn:length(myArrayList)}

答案 2 :(得分:1)

最新版本的EL支持方法调用${collection.size()}

其他两个答案为您提供更多详细信息

  • collections API不是故意符合JavaBeans规范。请注意,大小不一定是属性。一些实现动态地计算它。其他方法也是如此 - 它们不是简单的属性,并且使它们看起来像吸气剂是不合适的。
  • 在EL 2.2之前,您可以使用${fn:length(collection)}

顺便说一句,在JSP中,您通常不需要集合的size() - 您只需迭代它。如果必须执行一些计算,请考虑在servlet / controller中执行此操作。当然,我同意,有时在jsp本身使用它是有效的。