应用Iterator模式,却不知为什么出现这样的错误
以下我的程序,应用Iterator模式进行历遍,由于程序过长,我只筛选了程序的部分,另有一些文件没有给出,以下是MessageDB.java和ObjectIterator.java,和客户端文件test.java。其中还有LongList.java作为聚集,
我想请教大家:
1.我这样的结构好吗??
2.为什么会出现下面的错误:
现在我百思不得其解,真的认为自己写的东西没有错误,但是却报告如下:
程序可能长一些
Note: sun.tools.javac.Main has been deprecated.
C:\resin\doc\WEB-INF\classes\M\basic\ObjectIterator.java:12: Invalid method
declaration; return type required.
public ObjecIterator(int type,long[] elements,int startIndex,int IndexSize) throws ErrorStartOutofRecord
^
C:\resin\doc\WEB-INF\classes\M\Controller\MessageDB.java:68: Wrong number
of arguments in constructor.
return new ObjectIterator(MessageGlobals.IteratorTypeMessage,message.toArray(),startIndex,MessageGlobals.EVERY_PAGE_MESSAGE_SIZE);
-----------------------------------
M\Controller\MessageDB.java:
-----------------------------------
package M.Controller;
import java.sql.*;
import M.Error.ErrorProxyMessage;
import M.Message.*;
import M.MessageGlobals;
import M.basic.*;
import M.Message;
public class MessageDB implements Message
{
private long MessageID;
private String MessageContent;
private String MessageTitle;
private String MessageDatetime;
private long MessageUserID;
public Iterator getMessages(int startIndex) throws M.Error.ErrorProxyMessage
{
String GET_ALL_MESSAGEID="SELECT ID FROM MESSAGE";
LongList message=new LongList();
try
{
Connection conn=connectDB.connectDB();
PreparedStatement pstmt = conn.prepareStatement(GET_ALL_MESSAGEID);
ResultSet rs=pstmt.executeQuery();
while(rs.next())
{
message.add(rs.getLong("ID"));
}
}
catch(SQLException e)
{
}
return new ObjectIterator(MessageGlobals.IteratorTypeMessage,message.toArray(),startIndex,MessageGlobals.EVERY_PAGE_MESSAGE_SIZE);
/*
要说明一下:上面一句message.toArrary是返回long[]的
MessageGlobals是存放一些基本固定的参数
MessageGlobals.IteratorTypeMessage为int类型
MessageGlobals.EVERY_PAGE_MESSAGE_SIZE为int类型
*/
}
}
-----------------------------------
M\Controller\ObjectIterator.java:
-----------------------------------
package M.basic;
import M.*;
import M.Error.*;
public class ObjectIterator implements Iterator
{
private long[] newElements;
private long[] elements;
private int nowPoint;
private ObjectFactory objectFactory;
public ObjecIterator(int type,long[] elements,int startIndex,int IndexSize) throws ErrorStartOutofRecord
{
this.elements=elements;
int EVERY_PAGE_SIZE;
switch(type)
{
case MessageGlobals.IteratorTypeMessage:
this.objectFactory=new ObjectFactory()
{
Message message=new MessageProxy();
public Object loadObject(int index)
{
try
{
message.setID(index);
return message;
}
catch(M.Error.ErrorProxyMessage ex)
{
return message;
}
}
};
break;
case MessageGlobals.IteratorTypeUser:
this.objectFactory=new ObjectFactory()
{
User user=new UserProxy();
public Object loadObject(int index)
{
try
{
user.setID(index);
return user;
}
catch(M.Error.ErrorProxyUser)
{
return user;
}
}
};
break;
}
int start=startIndex-1;
int a=0;
if(start>=0 && start<this.elements.length)
{
if(this.elements.length-start>=IndexSize)
{
for(int i=start;i<=(start+IndexSize);i++)
{
this.newLongList[a]=elements[i];
a++;
}
}
else
{
for(int i=start;i<=(LongList.getSize()-1);i++)
{
this.newLongList[a]=elements[i];
a++;
}
}
}
else
{
throw new ErrorStartOutofRecord();
}
}
public void setFirst()
{
this.nowPoint=0;
}
public boolean hasNext()
{
if(this.nowPoint>=this.newLongList.length)
{
return false;
}
else
{
return true;
}
}
public Object next()
{
Object nextObject=this.objectFactory.loadObject(this.newLongList[this.nowPoint]);
this.nowPoint++;
return nextObject;
}
}
interface ObjectFactory {
public Object loadObject(int index);
}
-----------------------------------
客户端代码:test.java
-----------------------------------
package M;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import M.basic.*;
import M.Controller.*;
public class test extends HttpServlet
{
public Message messageObject;
public void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{
PrintWriter out=response.getWriter();
try
{
Message me=new MessageProxy(1);
Iterator message=messageObject.getMessages(1);
while(message.hasNext())
{
Message Mo;
Mo=(Message)message.next();
Mo.getMessageProperty();
out.println(Mo.getContent());
}
}
catch(M.Error.ErrorProxyMessage ex)
{
}
}
}