我有一个关于crawler的抽象类:
public abstract class AbstractCrawler {
public AbstractCrawler(){
initialize();
}
protected abstract void initialize();
protected abstract void work();
protected abstract void saveAndUpdate(Object obj);
}
正如您所看到的,“saveAndUpdate”的抽象方法需要Object的参数,因为,每个爬虫扩展此抽象将保存或更新不同的数据类型,如下所示:
public class UserCrawler extends AbstractCrawler{
@Override
protected void saveAndUpdate(List<User> obj) {
// TODO Auto-generated method stub
}
}
和CommentCrawler类:
public class CommentCrawler extends AbstractCrawler{
@Override
protected void saveAndUpdate(List<Comment> obj) {
// TODO Auto-generated method stub
}
}
很明显,只需做这样的事情。使抽象类更简洁。
答案 0 :(得分:4)
您可以使用内置的泛型支持,例如......
public abstract class AbstractCrawler<T> {
public AbstractCrawler(){
initialize();
}
protected abstract void initialize();
protected abstract void work();
protected abstract void saveAndUpdate(T obj);
}
这允许实现指定他们期望使用的数据类型......
public class CommentCrawler extends AbstractCrawler<List<Comment>> {
@Override
protected void saveAndUpdate(List<Comment> obj) {
//....
}
//...
}
另外,小心调用构造函数中的方法,方法可能依赖的方法可能尚未初始化。
查看Lesson: Generics了解更多详情......