Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使抽象类更简洁?_Java - Fatal编程技术网

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
是通用的,为了使用它,他们需要定义它…非常感谢。非常感谢。