Java 如何使抽象类更简洁?
我有一个关于爬虫的抽象类:Java 如何使抽象类更简洁?,java,Java,我有一个关于爬虫的抽象类: public abstract class AbstractCrawler { public AbstractCrawler(){ initialize(); } protected abstract void initialize(); protected abstract void work(); protected abstract void saveAndUpdate(Object obj); } 如您
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
}
}
public类UserCrawler扩展了AbstractCrawler{
@凌驾
受保护的无效保存和更新(列表对象){
//TODO自动生成的方法存根
}
}
和爬虫的类别:
public class CommentCrawler extends AbstractCrawler{
@Override
protected void saveAndUpdate(List<Comment> obj) {
// TODO Auto-generated method stub
}
}
公共类CommentCrawler扩展了AbstractCrawler{
@凌驾
受保护的无效保存和更新(列表对象){
//TODO自动生成的方法存根
}
}
很明显,只要这样做。使抽象类更简洁。您可以使用内置泛型支持,例如
public abstract class AbstractCrawler<T> {
public AbstractCrawler(){
initialize();
}
protected abstract void initialize();
protected abstract void work();
protected abstract void saveAndUpdate(T obj);
}
公共抽象类AbstractCrawler{
公共抽象爬虫(){
初始化();
}
受保护的抽象空初始化();
受保护的抽象无效作品();
受保护的摘要无效保存和更新(T obj);
}
这允许实现指定他们希望使用的数据类型
public class CommentCrawler extends AbstractCrawler<List<Comment>> {
@Override
protected void saveAndUpdate(List<Comment> obj) {
//....
}
//...
}
公共类CommentCrawler扩展了AbstractCrawler{
@凌驾
受保护的无效保存和更新(列表对象){
//....
}
//...
}
另外,从构造函数调用方法时要小心,因为该方法可能依赖的对象可能尚未初始化
查看更多详细信息…您可以使用内置泛型支持,例如
public abstract class AbstractCrawler<T> {
public AbstractCrawler(){
initialize();
}
protected abstract void initialize();
protected abstract void work();
protected abstract void saveAndUpdate(T obj);
}
公共抽象类AbstractCrawler{
公共抽象爬虫(){
初始化();
}
受保护的抽象空初始化();
受保护的抽象无效作品();
受保护的摘要无效保存和更新(T obj);
}
这允许实现指定他们希望使用的数据类型
public class CommentCrawler extends AbstractCrawler<List<Comment>> {
@Override
protected void saveAndUpdate(List<Comment> obj) {
//....
}
//...
}
公共类CommentCrawler扩展了AbstractCrawler{
@凌驾
受保护的无效保存和更新(列表对象){
//....
}
//...
}
另外,从构造函数调用方法时要小心,因为该方法可能依赖的对象可能尚未初始化
查看更多详细信息…使用泛型
公共抽象类AbstractCrawle{
然后使用受保护的抽象void saveAndUpdate(T obj)
…@MadProgrammer但其他程序员不知道t是什么,他们只想通过公共方法使用class的函数。在“saveAndUpdate”的子类方法中使用Object和converte如何这就是T
是泛型的,为了使用它,他们需要定义它…使用泛型公共抽象类AbstractCrawle{
,然后使用受保护的抽象void saveAndUpdate(T obj)
…@MadProgrammer但其他程序员不知道t是什么,他们只想通过公共方法使用class的函数。在“saveAndUpdate”的子类方法中使用Object和converte如何.这就是T
是通用的,为了使用它,他们需要定义它…非常感谢。非常感谢。