还有ResultSetVisitor 如下:
import java.sql.ResultSet;public interface ResultSetVisitor
{    public abstract boolean processNextRow(ResultSet resultset);    public abstract void setNumberOfRowsAffected(int i);
}

解决方案 »

  1.   

    没仔细看,不过可以肯定的是第三个参数是inner class,用得很多的一个概念,thinking in java里说的很详尽的,去看看会有进一步理解的。
      

  2.   

    实例db的 class定义如下:(有关select方法的)
    public void select(String sql, List parameters, ResultSetVisitor aListener)
            throws SQLException
        {
            execQuery(sql, parameters, aListener);
        }    public void select(String sql, ResultSetVisitor aListener)
            throws SQLException
        {
            execQuery(sql, new ArrayList(), aListener);
        }to  liuyuw(整狼专家)  
    好象与你说的inner class 没关系.
    不过也谢谢你.我不清楚inner class 是什么样的类.等我找thinking in java 看看再说.
      

  3.   

    从select方法定义上看.第三个参数 是个接口参数
    参数:rsc = new ResultSetCounter() {
                public boolean processNextRow(ResultSet rs) {}
    }
    的调用看样子是以 ResultSetCounter 类的实例 rsc 并重载了 接口ResultSetVisitor的方法 processNextRow();
    对于 db实例的select(String sql, List parameters, ResultSetVisitor aListener)
    方法来说aListener 接收的 是一个方法的地址的引用吗?照这样说 是不是可以用以下方法代替在先另 定义一个 ResultSetCounter的子类,再以原来的代码重载 processNextRow 方法
    class ResultSetCounterA extends ResultSetCounter
    {
         public boolean processNextRow(ResultSet rs) {
                   try {
                      id = rs.getInt(1);
                      type = rs.getInt(2);
                      topic = rs.getString(3);
                      info = TextField.getLargeText(rs, 4);
                      author = rs.getString(5);
                      url = rs.getString(6);
                      contentType = rs.getString(7);
                      date = DateField.getDate(rs, 8);
                      views = rs.getInt(9);
                      return super.processNextRow(rs);
                   }
                   catch(Exception e) {
                      e.printStackTrace();
                      return false;
                   }
                }
             }}
    然后这样调用:ResultSetCounterA  rsca =  new ResultSetCounterA();
    db.select(SELECT_ARTICLE_BY_ID, params, rsca.processNextRow(ResultSet rs));
    不知道我这样理解对不对,而且这样改了后又存在一个问题 processNextRow方法中的ResultSet rs 不知如何而来.因为原代码中db.select()前并没有定义.原码中定义如下:
     FDatabase db = FDatabase.getInstance();
          List params = new ArrayList();
          params.add(new Integer(id));
          ResultSetCounter rsc = null;
          try {
             db.select(SELECT_ARTICLE_BY_ID, params, rsc = new ResultSetCounter() {
                public boolean processNextRow(ResultSet rs) {
    ................
    ...........前面提到的 db的二个selet方法 就是在类FDatabase 中定义的.
      

  4.   

    rsc = new ResultSetCounter() {
                public boolean processNextRow(ResultSet rs) {}
    ...这样写法是构造一个匿名类并生成其实例
    建议参看Thinking in Java 2nd 的第八章
      

  5.   

    补充一下:
    这里的匿名类是ResultSetCounter()的子类,并覆写了其中的一些方法,如processNextRow(ResultSet rs)
      

  6.   

    to danceflash(Wine) blasterboy(Java你我共同努力!) 请问 processNextRow(ResultSet rs) 中的 rs 参数的值是如何传递的。
      

  7.   

    1.构造一个匿名类并生成其实例
    2.processNextRow(ResultSet rs) 是public的 也就是可以调用rsc.processNextRow(rs)而
    传递参数吧.
      

  8.   

    "processNextRow(ResultSet rs) 中的 rs 参数的值是如何传递的"这个问题是什么意思?没看懂 -_-b