首頁  >  問答  >  主體

java中给类增加属性的问题

类在jar包里,不方便直接修改类.. 想自定义一个类继承那个类 增加属性:

    public class Page<E> extends ArrayList<E> {
    /**
     * 不进行count查询
     */
    private static final int NO_SQL_COUNT = -1;

    /**
     * 进行count查询
     */
    private static final int SQL_COUNT = 0;

    private int pageNum;
    private int pageSize;
    private int startRow;
    private int endRow;
    private long total;
    private int pages;

    public Page(int pageNum, int pageSize) {
        this(pageNum, pageSize, SQL_COUNT);
    }

    public Page(int pageNum, int pageSize, boolean count) {
        this(pageNum, pageSize, count ? Page.SQL_COUNT : Page.NO_SQL_COUNT);
    }

    public Page(int pageNum, int pageSize, int total) {
        super(pageSize > -1 ? pageSize : 0);
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.total = total;
        this.startRow = pageNum > 0 ? (pageNum - 1) * pageSize : 0;
        this.endRow = pageNum * pageSize;
    }

    public Page(RowBounds rowBounds, boolean count) {
        this(rowBounds, count ? Page.SQL_COUNT : Page.NO_SQL_COUNT);
    }


    public Page(RowBounds rowBounds, int total) {
        super(rowBounds.getLimit() > -1 ? rowBounds.getLimit() : 0);
        this.pageSize = rowBounds.getLimit();
        this.startRow = rowBounds.getOffset();
        //RowBounds方式默认不求count总数,如果想求count,可以修改这里为SQL_COUNT
        this.total = total;
        this.endRow = this.startRow + this.pageSize;
    }

    public List<E> getResult() {
        return this;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public int getEndRow() {
        return endRow;
    }

    public void setEndRow(int endRow) {
        this.endRow = endRow;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getStartRow() {
        return startRow;
    }

    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
        if (this.pageSize > 0) {
            this.pages = (int) (total / this.pageSize + ((total % this.pageSize == 0) ? 0 : 1));
        } else {
            this.pages = (int) total;
        }
    }

    public boolean isCount() {
        return this.total > NO_SQL_COUNT;
    }

    @Override
    public String toString() {
        return "Page{" +
                "pageNum=" + pageNum +
                ", pageSize=" + pageSize +
                ", startRow=" + startRow +
                ", endRow=" + endRow +
                ", total=" + total +
                ", pages=" + pages +
                '}';
    }
}

这是一个分页类,我想增加两个属性:

private int nextPage;
private int previousPage;

自定义一个类来继承:

public class PagePlus<E> extends Page<E> {
    private int nextPage;
    private int previousPage;

    public PagePlus(int pageNum, int pageSize) {
        super(pageNum, pageSize);
        this.nextPage = super.getPageNum() + 1;
        this.previousPage = super.getPageNum() - 1;
    }

    public int getNextPage() {
        return nextPage;
    }

    public void setNextPage(int nextPage) {
        this.nextPage = nextPage;
    }

    public int getPreviousPage() {
        return previousPage;
    }

    public void setPreviousPage(int previousPage) {
        this.previousPage = previousPage;
    }
}

程序中是这样写的:

 @Override
    public PagePlus<Article> list(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        PagePlus<Article> page = (PagePlus<Article>) articleDao.list();
        return page;
    }

articleDao.list 返回的是List

java.lang.ClassCastException: com.github.pagehelper.Page cannot be cast to util.PagePlus

请问是哪里写的有问题?

PHP中文网PHP中文网2714 天前628

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-04-17 12:03:17

    報錯的資訊不是說的很詳細嗎,Page不能直接轉換為PagePlus.
    因為一個PagePlus是一個Page,但一個Page不一定是一個PagePlus,不能downcast.
    解決的方法之一:給PagePlus寫一個建構子,接受一個Page,

    public PagePlus(Page page) {
        this(page.getPageNum(), page.getPageSize());
        this.pages = page.getPages();
        //... 省略
    }
    

    articleDao.list()回傳的page建構成一個PagePlus再回傳

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 12:03:17

    根據JDK的代碼

    public class ClassCastException extends RuntimeException
    

    可知ClassCastException是RuntimeException的子類別

    你的程式碼

    articleDao.list()
    

    回傳的應該是Long或是Article的List,而非PagePlus,自然會報異常

    回覆
    0
  • 取消回覆