如何使抽象类更简洁?

时间:2014-10-17 01:37:29

标签: java

我有一个关于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

        }
}

很明显,只需做这样的事情。使抽象类更简洁。

1 个答案:

答案 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了解更多详情......