java 给类添加属性_java中给类增加属性的问题

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

public class Page extends ArrayList {

/**

* 不进行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 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 extends Page {

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 list(int pageNum, int pageSize) {

PageHelper.startPage(pageNum, pageSize);

PagePlus page = (PagePlus) articleDao.list();

return page;

}

articleDao.list 返回的是List

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

请问是哪里写的有问题?

Java属性通常是在定义时声明的,但是如果需要动态给添加属性,可以使用Java反射机制来实现。具体步骤如下: 1. 获取该的Class对象,可以使用Class.forName("的全限定名")方法或者的.class属性获取。 2. 使用Class的getDeclaredFields()方法获取该的所有属性。 3. 使用Class的getDeclaredMethod()方法获取该的set和get方法。 4. 使用Field的setAccessible(true)方法设置为可访问(因为有些属性可能是私有的)。 5. 使用Field的set()方法给该的实例对象设置属性值。 示例代码如下: ``` public class Test { public static void main(String[] args) throws Exception { // 获取的Class对象 Class<?> clazz = Class.forName("com.example.Person"); // 获取该的所有属性 Field[] fields = clazz.getDeclaredFields(); // 遍历属性添加属性 Field newField = new Field("newField", String.class); Field[] newFields = new Field[fields.length + 1]; System.arraycopy(fields, 0, newFields, 0, fields.length); newFields[fields.length] = newField; // 定义set和get方法 Method setNewField = clazz.getDeclaredMethod("setNewField", String.class); Method getNewField = clazz.getDeclaredMethod("getNewField"); // 创建对象并设置新属性值 Object obj = clazz.newInstance(); newField.setAccessible(true); newField.set(obj, "newFieldValue"); // 调用set方法设置新属性值 setNewField.invoke(obj, "newFieldValue"); // 调用get方法获取新属性值 System.out.println(getNewField.invoke(obj)); } } class Person { private String name; private int age; public void setNewField(String value) { this.newField = value; } public String getNewField() { return this.newField; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值