【问题标题】:How do I know what sort of List is returned?我怎么知道返回了什么样的列表?
【发布时间】:2014-07-31 21:15:16
【问题描述】:

使用 Hibernate Criteria,并声明:

DetachedCriteria detachedCriteria  =  DetachedCriteria.forClass(SomeEntity.class);

List<SomeObject> myListOfObjects = detachedCriteria.getExecutableCriteria(session).list();

我如何知道 myListOfObjects 是哪种列表实现? ArrayList, LinkList 等。我之所以问这个是因为我跟踪了所有代码,并且根据官方文档,

DetachedCriteria.getExecutableCriteria(session).list() 

返回一个Criteria,应用于Criteria的list()返回一个List:

http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/criterion/DetachedCriteria.html http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Criteria.html

【问题讨论】:

  • 如果你仔细阅读,它还说 list() 返回The list of matched query results,即SomeEntity.Class,使用与您过滤结果的SomeEntity 属性匹配的条件进行过滤。
  • 为什么返回什么类型的List 很重要?如果您需要特定类型,手动将其转换为该类型会更安全,否则您可以使用List 接口定义的方法,知道底层类型实现了它们。
  • Evan Knowles -- 我认为最终程序员需要知道是否有具体的 List 实现;否则,我认为您不能在 List 接口上调用任何方法。这就是我进行跟踪的原因,但我是否正确的是它以某种方式对我隐藏并且我假设它有一个具体的列表类,因此我可以使用 List 接口的方法?

标签: java hibernate list


【解决方案1】:

您可以使用以下方法来控制返回的 List 接口的运行时类:-

DetachedCriteria detachedCriteria  =  DetachedCriteria.forClass(SomeEntity.class);

List<SomeObject> myListOfObjects = detachedCriteria.getExecutableCriteria(session).list();

System.out.println(myListOfObjects.getClass());

【讨论】:

  • 是的,你可以,但这有什么好处呢? List 提供了人们需要的一切,除此之外,永远不应该依赖接口的具体实现。
  • @correct...我同意。在极少数情况下,可能会尝试添加或删除对象。所以了解 List 类型将有助于可视化性能
【解决方案2】:

您可以在您想要的任何 List 实现中使用您的 myListOfObjects。您可以对其进行类型转换,用作 List 实现的构造函数的参数,并在实用程序类中使用它,例如 Collections

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多