WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 db4o 指南: 结构化对象和集... 阅读

面向 Java 开发人员的 db4o 指南: 结构化对象和集合

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: 您可能会感到奇怪,不管如何查询,面向 Java 开发人员的 db4o 指南: 结构化对象和集合(6),返回的对象仍然是适当的子类型对象,例如,这样就完成了查询(记住 match() 调用只返回 true 或者 false,表示候选对象是否应该返回),跟预期的一样,在上面的查询中当 toStrin

您可能会感到奇怪,不管如何查询,返回的对象仍然是适当的子类型对象。例如,跟预期的一样,在上面的查询中当 toString() 被每个返回的 Person 对象调用时,Person.toString() 也正被每个 Person 调用。然而,因为 Employee 有一个重写的 toString() 方法,因此关于动态绑定的常用规则就不适用了。存储在 Employee 中的 Person 的各部分不会被 “切掉”,而当定期 SQL 查询未能成功地将派生子类表加入到 table-per-class 模型中时,这种被 “切掉” 的现象就会发生。

原生继承

当然,当继承条件扩展到原生查询中时,其功能就跟我所做过的简单对象查询一样强大。进行调用时,查询语法将会更加复杂,但是基本上遵循我以前所使用的语法,如清单 7 所示:

清单 7. 你是单身吗?

@Test public void testNativeQuery() 
{ 
  List<Person> spouses = 
    db.query(new Predicate<Person>() { 
      public boolean match(Person candidate) { 
        return (candidate.getSpouse() instanceof Employee); 
      } 
    }); 
  for (Person spouse : spouses) 
    System.out.println(spouse); 
} 

下面的查询与我以前做过的查询在思想上类似,考虑系统中所有的 Person,但是设置一个约束条件,只查找配偶也是一个 Employee 的 Person — 调用 getSpouse(),将返回值传递给 Java instanceof 运算符,这样就完成了查询(记住 match() 调用只返回 true 或者 false,表示候选对象是否应该返回)。

请注意如何通过更改在 query() 调用中传递的 Predicate 来更改隐式选择的类型条件,如清单 8 所示:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接