有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使抽象类更简洁?

我有一个关于爬虫的抽象类:

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 class CommentCrawler extends AbstractCrawler{
        @Override
        protected void saveAndUpdate(List<Comment> obj) {
            // TODO Auto-generated method stub

        }
}

很明显,就这么做吧。使抽象类更加简洁


共 (1) 个答案

  1. # 1 楼答案

    你可以使用内置的泛型支持,例如

    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了解更多详细信息