java 反向迭代器_Java 学习笔记 反射与迭代器

反射

使用反射获得Class类

Class cls = Class.forName("全类名") //包括包名

Class cls = xx.Class;//xx代表类名

Class cls = 对象.getClass();

使用反射获得构造方法

有个构造方法如:

public Book(String bookName, String author,double price) {

this.bookName = bookName;

this.author = author;

this.price = ((int) price);

}

在使用反射来获得的构造方法的时候需要与构造方法中的参数类型进行对应

Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, double.class);

//或者使用包装类的静态常量TYPE,表示的是该包装类的基本类型

Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, Double.TYPE);

使用反射获得一个对象实例

例如

Student student = cls.newInstance();

使用反射获得属性名(字段名,成员变量名)

以下的方法都是返回Field数组

getDeclaredFields()

返回所有的字段名,但不包括继承的属性名(字段名,成员变量名)

getFields()

返回所有的字段名,包括继承的属性名(字段名,成员变量名)

使用反射获得方法

以下两种方法均是返回一个Method数组

cls.getMethods()

包括继承的方法

cls.getDeclaredMethods()

不包括继承的方法

cls.getMethod(String name,parameterTypes)

返回指定方法名的Method,name为方法名,后面参数为该方法的参数列表,参数列表记得按照顺序

获得类中某个方法的返回类型

method.getReturnType()

返回该方法的返回类型,是一个Class对象(返回类型对应的class)

//如

public String hello(){

...

};

method.getReturnType();//返回的就是java.lang.String

method.getGenericReturnType()

返回的是一个Type类对象

使用反射调用方法

method.invoke(Object o...)

Object是参数列表

获得类中getXxx方法并调用

获得所有的字段名,根据字段名拼接成正确的getXxx方法名,之后获得指定方法名的Method,之后调用即可

Student student = new Student();

Class extends Student> c1 = student.getClass();

Field[] declaredFields = c1.getDeclaredFields();

for (Field declaredField : declaredFields) {

String name = declaredField.getName();

//使用IDEA生成的set/get方法都是遵循驼峰命名法,我们的命名也得按照驼峰命名法

//这样,我们只需要把第一个单词的开头字母转为大写的字母即可获得正确的方法名,之后调用即可

String a = name.substring(0, 1).toUpperCase();//首字母大写

String b = name.substring(1);//截取剩余的字符串

Method method = c1.getMethod("get" + a+b);//拼接,并查找匹配的方法

method.invoke();

}

list 迭代器

listiterator和iterator

listiterator继承iterator,是iterator的增强版

listiterator可以双端遍历,通过list.listIterator()方法返回,方法中可以带一个指定下标的数,比iterator要方便

如果想要从末尾向前找,可以定义迭代器的开始为list的末尾,之后往前查找

ListIterator listIteratorlists.listIterator(lists.size());

while (listIterator.hasPrevious()) {

System.out.println(listIterator.previous());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值