Java 学习笔记 反射与迭代器
生活随笔
收集整理的這篇文章主要介紹了
Java 学习笔记 反射与迭代器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
反射
使用反射獲得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);}在使用反射來獲得的構造方法的時候需要與構造方法中的參數(shù)類型進行對應
Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, double.class); //或者使用包裝類的靜態(tài)常量TYPE,表示的是該包裝類的基本類型 Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, Double.TYPE);使用反射獲得一個對象實例
例如
Student student = cls.newInstance();使用反射獲得屬性名(字段名,成員變量名)
以下的方法都是返回Field數(shù)組
- getDeclaredFields()
返回所有的字段名,但不包括繼承的屬性名(字段名,成員變量名) - getFields()
返回所有的字段名,包括繼承的屬性名(字段名,成員變量名)
使用反射獲得方法
以下兩種方法均是返回一個Method數(shù)組
- cls.getMethods()
包括繼承的方法 - cls.getDeclaredMethods()
不包括繼承的方法 - cls.getMethod(String name,parameterTypes)
返回指定方法名的Method,name為方法名,后面參數(shù)為該方法的參數(shù)列表,參數(shù)列表記得按照順序
獲得類中某個方法的返回類型
- method.getReturnType()
返回該方法的返回類型,是一個Class對象(返回類型對應的class)
method.getGenericReturnType()
返回的是一個Type類對象使用反射調用方法
method.invoke(Object o...)
Object是參數(shù)列表
獲得類中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()方法返回,方法中可以帶一個指定下標的數(shù),比iterator要方便
如果想要從末尾向前找,可以定義迭代器的開始為list的末尾,之后往前查找
ListIterator listIteratorlists.listIterator(lists.size()); while (listIterator.hasPrevious()) {System.out.println(listIterator.previous()); }轉載于:https://www.cnblogs.com/kexing/p/10617400.html
總結
以上是生活随笔為你收集整理的Java 学习笔记 反射与迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发
- 下一篇: 为什么从前那些.NET开发者都不写单元测